Относится ли отношение PHP к исключениям в версии 5.4.10?

Следующие действия будут работать в PHP 5.3, но не в PHP 5.4.10.

throw new Custom_Exception();

class Custom_Exception extends Exception {}

PHP 5.4.10 ответил бы со следующей фатальной ошибкой:

Класс "Custom_Exception" не найден в...

Кто-нибудь знает, почему?

p.s. Перемещение определения класса над выражением throw исправляет его.

Ответ 1

Я помещаю ваш код в файл с именем test.php и загружаю php-5.4.10

Когда я выполняю:

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

Я вижу следующий вывод:

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

Я считаю, что у вас проблема конфигурации. Вы тестируете из командной строки?

Edit:

Я также сравнил do_bind_inherited_class в zend_compile.c для обеих версий.

zend_compile.c из 5.3

zend_compile.c из 5.4.10

Похоже, что они только добавили поддержку признаков.

Мой ответ: Нет, я не верю, что отношение изменилось.

Ответ 2

Я думаю, что это будет наоборот

class Custom_Exception extends Exception {}

throw new Custom_Exception();

потому что перед его вызовом необходимо создать дочерний класс Custom_Exception().