2013-02-25 1 views
10

Folgendes würde in PHP 5.3 funktionieren, aber nicht in PHP 5.4.10.Hat sich die Einstellung von PHP gegenüber Ausnahmen in Version 5.4.10 geändert?

throw new Custom_Exception(); 

class Custom_Exception extends Exception {} 

PHP 5.4.10 würde mit dem folgenden schwerwiegenden Fehler reagieren:

Class 'Custom_Exception' not found in ...

Wer weiß, warum?

p.s. Wenn Sie die Klassendefinition über die throw-Anweisung verschieben, wird sie korrigiert.

+0

@nathanhayfield, Nein, es passiert nur mit 'throw'. –

+1

Könnte ein Fehler sein, funktioniert sowohl in '5.4.9' und' 5.5-dev': http://codepad.viper-7.com/XTloFa – Niko

+1

@Niko, nach dem folgenden Dienst funktioniert es in 5.4.10 entweder, aber es ist nicht - http://sandbox.onlinephpfunctions.com/. Haben Sie es auf einer echten Maschine getestet? –

Antwort

-3

Ich denke, es nehme an, die umgekehrt

class Custom_Exception extends Exception {} 

throw new Custom_Exception(); 

zu sein, weil Sie die Child Custom_Exception erstellen müssen(), bevor sie anrufen.

+0

Sicher, aber warum? ... –

+0

Ich bin nicht ganz sicher, aber ist es nicht wie Echo $ String sagen; dann setze $ string = "Hallo Welt"; in der zweiten Zeile? – Richie

+2

Das ist falsch. Eine Klassendeklaration sollte irgendwo in einer Datei vorkommen können. –

1

Ich habe den Code in eine Datei mit dem Namen test.php und heruntergeladen php-5.4.10

Wenn ich ausführen:

php -c php.ini-development -f test.php 

Ich sehe die folgende Ausgabe:

PHP Fatal error: Uncaught exception 'Custom_Exception' in test.php:3 
Stack trace: 
#0 {main} 
    thrown in test.php on line 3 

Fatal error: Uncaught exception 'Custom_Exception' in test.php:3 
Stack trace: 
#0 {main} 
    thrown in test.php on line 3 

ich Sie glauben habe ein Konfigurationsproblem. Testen Sie über die Befehlszeile?

Edit:

ich auch do_bind_inherited_class in zend_compile.c für beide Versionen verglichen.

zend_compile.c from 5.3

zend_compile.c from 5.4.10

Es sieht aus wie sie nur Unterstützung für Merkmale hinzugefügt.

Meine Antwort lautet: Nein, ich glaube nicht, dass sich die Einstellung geändert hat.

+0

Dies ist ein Kommentar; Außerdem könnte es einfach zu http://3v4l.org/XaECZ –

+0

@Jack verdichtet werden: Bevor ich meine Antwort postete, suchte ich nach dieser Seite, danke! Ich denke, meine ist eine Antwort, ich bin der Erste, der die gleiche Version getestet hat, und auch der Einzige, der die Frage des OP beantwortet hat. (Nein, die Einstellung hat sich nicht geändert) – Martin

+0

Um fair zu sein, die "Antwort" auf die Frage wurde bereits in [dieser Kommentar] gegeben (http://stackoverflow.com/questions/15078219/has-phps-attitude-towards-) Ausnahmen-geändert-in-Version-5-4-10/16827225? Noredirect = 1 # comment21206563_15078219). Außerdem antwortet es nicht * warum * das passiert nur für OP (so scheint es). –

Verwandte Themen