2013-02-25 11 views
10

Poniższe będą działać w PHP 5.3, ale nie w PHP 5.4.10.Czy stosunek PHP do wyjątków został zmieniony w wersji 5.4.10?

throw new Custom_Exception(); 

class Custom_Exception extends Exception {} 

PHP 5.4.10 zareaguje z następującym błędem fatalnym:

Class 'Custom_Exception' not found in ...

Czy ktoś wie dlaczego?

p.s. Przeniesienie definicji klasy nad instrukcją throw ją naprawia.

+0

@nathanhayfield, Nie, to się dzieje tylko przy 'rzucie'. –

+1

Może to być bug, działa zarówno w '5.4.9' i' 5.5-dev': http://codepad.viper-7.com/XTloFa – Niko

+1

@Niko, Według poniższej usługi działa w wersji 5.4.10 albo, ale nie - http://sandbox.onlinephpfunctions.com/. Czy testowałeś to na prawdziwej maszynie? –

Odpowiedz

-3

myślę, że to niby ma być vice versa

class Custom_Exception extends Exception {} 

throw new Custom_Exception(); 

bo trzeba stworzyć Custom_Exception childclass() przed wywołaniem go.

+0

Pewnie, ale dlaczego? ... –

+0

Nie jestem całkiem pewny, ale nie jest to jak powiedzenie echo $ string; następnie wstaw $ string = "Hello World"; w drugiej linii? – Richie

+2

To jest nieprawidłowe. Deklaracja klasy powinna mieć możliwość wystąpienia w dowolnym miejscu pliku. –

1

umieścić swój kod w pliku o nazwie test.php, a pobrane php-5.4.10

Kiedy wykonać:

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

widzę następujący wynik:

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 

wierzę ci mieć problem z konfiguracją. Czy testujesz z wiersza poleceń?

Edit:

również w porównaniu do_bind_inherited_class w zend_compile.c dla obu wersji.

zend_compile.c from 5.3

zend_compile.c from 5.4.10

Wygląda na to, że tylko dodano wsparcie dla cech.

Moja odpowiedź brzmi: Nie, nie wierzę, że zmieniło się nastawienie.

+0

To jest komentarz; poza tym, może to być skondensowane po prostu http://3v4l.org/XaECZ –

+0

@Jack: Zanim napisałem swoją odpowiedź, szukałem tej strony, dziękuję! Myślę, że moja jest odpowiedzią, wydaje mi się, że jestem pierwszą, która przetestowała tę samą wersję, a także jedyną, która odpowiedziała na pytanie postawione przez PO. (Nie, nastawienie się nie zmieniło) – Martin

+0

Aby być sprawiedliwym, "odpowiedź" na pytanie została już podana w [this comment] (http://stackoverflow.com/questions/15078219/has-phps-attitude-towards- wyjątki-zmieniono-w-wersji-5-4-10/16827225? noredirect = 1 # comment21206563_15078219). Ponadto nie odpowiada * dlaczego * tak się dzieje tylko w przypadku OP (tak się wydaje). –

Powiązane problemy