PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] MyException extends Exception



Latency
12.04.2005, 17:59
Auf der Suche nach ein wenig interessanteren Fehlerbehandlungsmöglichkeiten sind mir vor kurzem Exceptions in PHP5 untergekommen. Insbesondere die Möglichkeit Exceptions zu erweitern. Jedoch haben meine neuen Exceptions ein äußerst komisches verhalten.

Denn zum einen muss meine Erbende-Klasse unbedingt die selbe Konstruktorsignatur haben wie Exception, zum anderen kann ich nicht auf meine Properties zugreifen.

Aber nu erstmal ein wenig Code damit ich wisst was ich meine.

class LoginException extends Exception
{
private $nick;
private $uid;
private $sid;

/**
* @param String Message The ErrorMessage to Display
* @param Integer Code The ErrorCode of this Error
* @param String/Integer User Nick of the User who is causing this
* Exception
*/
public function __consturct($message = "", $code)
{
$this->nick = "Test";
$this->uid = $_COOKIE['uid'];
$this->sid = session_id();

parent::__construct($message, $code);
}

public function getNick()
{
return $this->nick;
}
public function getUID()
{
return "jo";
}
}

Das wäre meine neu Exception. Nun werf ich die mal fröhlich durch den Interpreter.

try
{
$o = throw new LoginException("LoginError", 0);
}
catch(LoginException $e)
{
echo $e->getNick();
echo $e->getUID();
}

So das müsste doch folgendes ausgeben:

Testjo
Macht es aber nicht, irgendwelche Ideen warum?
Im Grunde sollte es doch kein Problem sein, da ich doch bloß von der Exception-Klasse erbe, aber dennoch läuft der Code nicht.

edit:
Hilfe bin ich dumm -_-

Man sollte darauf achten __construct zu schreiben und nicht __conturct -_-

Jetzt geht alles, ich komm auf meine Eigenschaften, sowie den Konstruktor kann ich mir anpassen.

edit2:
Nichts desto trotz sind Exceptions toll, liest euch mal ein wenig ein (http://de.php.net/manual/de/language.exceptions.php).

Jesus_666
13.04.2005, 21:19
Nichts desto trotz sind Exceptions toll, liest euch mal ein wenig ein (http://de.php.net/manual/de/language.exceptions.php).
Natürlich sind Exceptions toll. In Java sind sie noch besser, weil eine Integerfunktion nicht einfach false zurückgeben kann, wenn was nicht klappt. Nein, dazu muß man erst eine Exception einbauen...

Naja, mal sehen wie PHP5 die handhabt; ich habe hier immer noch überall Version 4.

MuadDib
13.04.2005, 21:45
Natürlich sind Exceptions toll. In Java sind sie noch besser, weil eine Integerfunktion nicht einfach false zurückgeben kann, wenn was nicht klappt. Nein, dazu muß man erst eine Exception einbauen...
Ist das nicht generell der Sinn bei Exceptions, dass man trotz genormter Schnittstellen etwaige Fehler beheben kann, die nicht dem Rückgabewert entsprechen, und der Entwickler, der deine Funktion verwendet auch darauf reagieren kann und sein Programm fehlerfreier und sicherer gestalten kann? Ich für meinen Teil wäre ziemlich verstört, wenn ich einen int erwarte, und mir die Funktion false herausspuckt, wobei ich obendrein nicht einmal wissen muss, dass die Funktion überhaupt dieses Verhalten an den Tag legt. Wenn mich der Compiler allerdings warnt, dass hier eine Exception geworfen wird, auf die ich regieren kann, sieht die Sache natürlich ganz anders aus... . Also um ehrlich zu sein, halte ich Exception Handling für das absolut genialste Fehlerbehebungssystem, dass eine Sprache überhaupt bieten kann, und wäre froh, wenn es einen ähnlichen Mechanismus auch in C gebe (... den lächerlichen C++ try/catch Versuch ausgenommen) --> error codes sind einfach nicht das Wahre.

Entschuldigung für Semi-Off-Topic.

Dingsi
13.04.2005, 22:07
[...] (... den lächerlichen C++ try/catch Versuch ausgenommen) [...]Was ist an dem so schlecht? Ich kenn mich mit Java nicht sonderlich aus, also weiß ich nicht, was da besser ist, aber ich kann mir irgendwie keinen großen Unterschied vorstellen.

P.S.: Ja, Off-Topic, aber das ist mir egal. o.o Notfalls kann mans ja ins Progforum verschieben und umbennen oder nen neuen Thread aufmachen oder was auch immer.

dadie
13.04.2005, 22:10
*nich schlagen*

Ich habe mir alles durchgelesen bin aber total verwirrt :

Was ist eine Exception und was bringt sie oO?

Wozu ist sie gut was macht sie ?

Jesus_666
13.04.2005, 22:25
@MuadDib:
Ich persönlich bevorzuge PHP-artige Konstrukte wie if ($variable = IntegerFunktion($foobar)). Aber natürlich sind in einer strikt typisierten Sprache wie Java Exceptions die bessere Methode - nur für etwas syntaktischen Zucker muß man nicht gleich die ganze Sprache aufweichen.

Außerdem ist es irgendwie cool, wenn man für eine poplige doppelt verkettete Liste drei normale Klassen und zwei Exceptions benutzt. Zumindest, wenn man den Kram hinterher seinem armen Tutor vorsetzt. ;)

MuadDib
14.04.2005, 20:50
Was ist an dem so schlecht? Ich kenn mich mit Java nicht sonderlich aus, also weiß ich nicht, was da besser ist, aber ich kann mir irgendwie keinen großen Unterschied vorstellen.

P.S.: Ja, Off-Topic, aber das ist mir egal. o.o Notfalls kann mans ja ins Progforum verschieben und umbennen oder nen neuen Thread aufmachen oder was auch immer.
Soweit ich mich erinnere (und ich lasse mich gerne eines besseren belehren), ist es in C++ nicht möglich (bzw. hab ichs in der Anwendung noch nie so gesehen), die Methoden meiner Klassen so zu gestalten, dass der Benutzer dieser Klassen darauf hingewiesen wird, dass eine Exception geworfen wird und auch darauf reagieren muss - In Java hingegen muss auf diese Exception reagiert werden.
Wie gesagt, ich lasse mich hier gerne eines besseren belehren, aber die Anwendungsfälle, die ich bislang gesehen habe, sind lediglich syntactic sugar um sich komplexere if-statements zu ersparen...



Ich persönlich bevorzuge PHP-artige Konstrukte wie if ($variable = IntegerFunktion($foobar)). Aber natürlich sind in einer strikt typisierten Sprache wie Java Exceptions die bessere Methode - nur für etwas syntaktischen Zucker muß man nicht gleich die ganze Sprache aufweichen.

Klar, Dinge im nachhinein in eine Sprache einzubauen ist immer so eine Sache, vor allem, da die Leute sie meistens nicht verwenden... (sieh dir Java 1.5 an, ... wer braucht Templates? Die einzige sinnvolle Neuerung sind Annotations und System.out.printf(...)).
Und da in PHP ja sowieso jede Variable vom Typ Variable ist, bieten sich solche Konstrukte auch an ;)

Latency
14.04.2005, 22:08
Soweit ich mich erinnere (und ich lasse mich gerne eines besseren belehren), ist es in C++ nicht möglich (bzw. hab ichs in der Anwendung noch nie so gesehen), die Methoden meiner Klassen so zu gestalten, dass der Benutzer dieser Klassen darauf hingewiesen wird, dass eine Exception geworfen wird und auch darauf reagieren muss - In Java hingegen muss auf diese Exception reagiert werden.
Mag sein, dass ich dich Missverstanden habe, aber auch wenn der Benutzer nicht darauf hingewiesen wird, spätestens bei der ersten nicht aufgefangenen Exception wird er es doch merken.

dadie
14.04.2005, 22:17
*hust* *hust* *hust*

Ignoriert ihr meine Frage extra ? Ich möchte doch nur wissen

Was ist eine Exception und was bringt sie oO?

Wozu ist sie gut was macht sie ?

ist das den wirklich zuviel verlangt ? -.-