• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage: Exception Handling in magischer autoload funktion.

  • Ersteller Ersteller Gelöschtes Mitglied 2703
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
G

Gelöschtes Mitglied 2703

Guest
Ich habe eine frage zur magischen __autoload() funktion:
Ich kann, egal was ich tue keine Exception die in dieser funktion geworfen wurde auffangen.
Code:
Fatal error: Function __autoload() threw an exception from type [....]
Auf php.net habe ich folgendes gefunden:
Anmerkung: Exceptions, die in einer __autoload Funktion geworfen werden, sind nicht in einem Catch-Block fangbar und führen zu einem fatalen Fehler.

Weiss jemand warum das so ist? Gibt es andere Fälle in dem Exceptions unfangbar sind?
Mich würde das einfach mal interessieren da ich es eigentlich gebraucht hätte ;)

[__autoload hat ja keinen auswertbaren rückgabe wert und error handler benutze ich sonst nie]
 
Re: Frage: Exception Handling in magischer autoload funktion

niklasboelter schrieb:
Ich habe eine frage zur magischen __autoload() funktion:
Ich kann, egal was ich tue keine Exception die in dieser funktion geworfen wurde auffangen.
Code:
Fatal error: Function __autoload() threw an exception from type [....]
Auf php.net habe ich folgendes gefunden:
Anmerkung: Exceptions, die in einer __autoload Funktion geworfen werden, sind nicht in einem Catch-Block fangbar und führen zu einem fatalen Fehler.

Weiss jemand warum das so ist? Gibt es andere Fälle in dem Exceptions unfangbar sind?
Mich würde das einfach mal interessieren da ich es eigentlich gebraucht hätte ;)

[__autoload hat ja keinen auswertbaren rückgabe wert und error handler benutze ich sonst nie]

bisher war s hier immer so dass du der bist der alles und am meisten über PHP weiss....
 
Sehr sinnvoll w7, für so eim hochwertigen Beitrag niklasboelters Post komplett zu zitieren. :roll:

@Mod, Admin
Bitte beide Beiträge löschen! SPAM! :lol: :P
 
Warum das so ist weiß ich auch nicht genau. In einer php.net-Mailingslist steht dazu
AFAIK you cannot throw an exception during the __autoload function. Or
at least that was the way it was for me when I tried it back in 5.0.0b2.
The answer I got was something along the lines of "the executor would
have no idea where to return"
Der Beitrag ist aber schon sehr alt. Sieht man ja an der PHP-Version, die dort getestet wurde.
Ist aber ein interessanter Punkt. :idea:

Du könntest alternativ z.B. so etwas hier machen
Code:
trigger_error('File cannot be found.', E_USER_WARNING);

Grüße, Ben.
 
ja genau das wollte ich ja eigentlich vermeiden weil ich eigentlich fehler mit dem "alten" error system nicht [mehr] benutze - naja werde wohl nicht drum herum kommen. danke für deine antwort :)
 
Ist jetzt keine Lösung für Dein Problem, aber wegen dem beschriebenen Problem benutze ich die autoload Funktion nicht. Bei mir kommt noch dazu, dass ich es nicht unbedingt toll finde, wenn meine Skripte Klassen automatisch einbinden. ;ugl

Wir benutzen eine import($classname) Funktion, die quasi das gleiche macht wie eine autoload Funktion. Am Anfang jeder Datei stehen dann erstmal eine Reihe von import-Anweisungen und Elternklassen und immer benötigte Klassen werden so eingebunden. Für dynamisch einzubindende Klassen (z.B. Handler für spezielle Events, die nur selten gebraucht werden) kann das import dann natürlich auch innerhalb einer Methode aufgerufen werden.

Falls eine Klasse nicht geladen werden kann, können wir eine Exception werfen und die entsprechend behandeln.

Nebenbei: Die import Funktion benutzt auch den PHP Inkludepfad nicht mehr, weil require_once und co sonst relativ langsam sind... :wink:
 
@charlie:
Denke, dass das eine Art von "Grundsatz"diskussion ist. Die pro/contra-Lager bzgl. der __autoload()-Funktion sind ja beide stark vertreten .. beide mit guten Argumenten. ;)
 
Eine Diskussion (noch dazu eine Grundsatzdisskussion) zu starten war nicht meine Absicht. Im Gegenteil: Ich bin der Meinung, dass die funktionalen Anforderungen und die Moeglichkeiten unabhaengig von irgendwelchen persoenlichen Praeferenzen gegeneinander abgewogen werden sollten. Und autoload kommt dabei halt nicht so gut weg ;-)

Hoechstwahrscheinlich bin ich aber nur C++ und Java geschaedigt.

Und jetzt: Back to Topic :!:
Unter http://wiki.cc/php/Overload_autoload habe ich eine Möglichkeit gefunden. Schoen ist was anderes, aber das hatten wir ja schon... :roll:
 
nunja es geht eigentlich darum die Fehler einheitlich mit einem Exception Handler zu loggen, an den User sollen eigtl keine Meldungen gehen :)
Deswegen ist das mit die() irgendwie nicht so das Wahre ;)

Die autoload funktion benutze ich viel für Exceptions, solange keine Exception geworfen wird [status Quo] werden also auch keine Exception Klassen geladen die ein unnötigen Overhead bedeuten würden :)
 
die idee ist wirklich genial ;heart
eval ist zwar evil - aber ich denke in dem fall kann nicht viel passieren.
 
Kurzer Einwurf. die() ist ein Alias zu exit() und Aliase sollen nicht verwendet werden. Wer nicht weiß wie ich darauf komme, der sollte mal vom deutschen ins Originalmanual wechseln. ;-)

Grüße, Ben. :)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben