Exeptions extend - OOP like?

boast

Mitglied
Hab folgendes Problem (also eigentlich ja nicht, es funktioniert ja alles, nur ich weiss nicht, ob "das" OOP ist...):

PHP:
class MyException extends Exception {
	private $title = "";
	
	public function __toString() {
		return "<br /><br /><strong>".$this->title."</strong><br />\n
				<em>ErrorMessage</em> ".$this->message."<br />\n
				<em>ErrorNumber:</em> ".$this->code."<br />\n
				<em>ErrorFile:</em> ".$this->file."<br />\n
				<em>ErrorLine:</em> ".$this->line."<br />\n
				<br />\n
				<em>ErrorTrace:</em> ".parent::getTraceAsString()."<br /><br />\n";
	}
	
	private function setTitle() {
		$this->$title = "ERROR:";
	}
}

class AnotherException extends MyException {
	private function setTitle() {
		$this->$title = "ANOTHER ERROR:";
	}
}

Auch möglich wäre:

PHP:
class MyException extends Exception {
	private $title = "ERROR:";
	
	public function __toString() {
		return "<br /><br /><strong>".$this->title."</strong><br />\n
				<em>ErrorMessage</em> ".$this->message."<br />\n
				<em>ErrorNumber:</em> ".$this->code."<br />\n
				<em>ErrorFile:</em> ".$this->file."<br />\n
				<em>ErrorLine:</em> ".$this->line."<br />\n
				<br />\n
				<em>ErrorTrace:</em> ".parent::getTraceAsString()."<br /><br />\n";
	}
}

class AnotherException extends MyException {
	private $title = "ANOTHER ERROR:";
}

Nunja, was ist "mehr" OOP? Wo könnte ich Probleme bekommen?

(Kurz was die Klassen machen sollen: Ich verwalte mehrere Typen von Exeptions, obwohl noch einiges mehr geschieht als hier dargestellt, verändern sich bei der Ausgabe selbst nur der Titel...)
 
Zuletzt bearbeitet:
besser wäre möglichkeit A mit einer Verbesserung, den Titel wirst du ja nicht dauerhaft ändern oder? Also pack die titel-übergabe in den konstruktor, denn den inhalt einer exception wird man selten nach dem erstellen dieser nochmal ändern, also ab in den konstruktur damit und fertig ist das oop.
 
PHP:
class MyException extends Exception {
	private $title = "";

	function __construct($message = NULL, $code = 0) {
		parent::__construct($message, $code);
		$this->setTitle();
	}
	
	public function __toString() {
		return "<br /><br /><strong>".$this->title."</strong><br />\n
				<em>ErrorMessage</em> ".$this->message."<br />\n
				<em>ErrorNumber:</em> ".$this->code."<br />\n
				<em>ErrorFile:</em> ".$this->file."<br />\n
				<em>ErrorLine:</em> ".$this->line."<br />\n
				<br />\n
				<em>ErrorTrace:</em> ".parent::getTraceAsString()."<br /><br />\n";
	}
	
	private function setTitle($title = "ERROR:") {
		$this->$title = $title;
	}
}

class AnotherException extends MyException {
	function __construct($message = NULL, $code = 0) {
		parent::__construct($message, $code);
		parent::setTitle("ANOTHER ERROR:");
	}
}

Sowas?

Hmm... sowas wäre natürlich auch nett:
PHP:
	function __construct($message = NULL, $code = 0) {
		parent::__construct($message, $code);
		parent::setTitle(__CLASS__);
	}
 
Zuletzt bearbeitet:
wie die Implementierung in PHP aussieht weiss ich gerade net aber mittels parent:: auf ne private Methoder der superclass zugreifen?

dann die setTitle()-Funktion mit nur einem einfachen Gleichheitszeichen?
 
Zurück