Intereting Posts
Доступ к данным @attributes в SimpleXMLElement в PHP Автоматическое заполнение текстового поля в зависимости от значения Drop Down Как отформатировать дату UTC для использования указателя зоны Z (Zulu) в php? ERR_INCOMPLETE_CHUNKED_ENCODING Загрузка страницы Chrome Root Есть ли простой способ создания субдоменов на codeigniter? Перенос загруженного файла на удаленный сервер Предупреждение: join () : недопустимые аргументы, переданные в C проблема с WHERE в mysql Использование .htaccess для изменения показа каталога в URL-адресе Непоследовательные результаты с API PHP Reflection регулярное выражение, не совпадающее из-за повторной группы захвата, а не захвата повторяющейся группы Ошибка Symfony sf_culture = 1 Избегайте дублирования идентификаторов в PHP Как я могу обнаружить и выжить, будучи «Slashdotted»? Slim PHP: только улавливать допустимые маршруты с помощью промежуточного программного обеспечения

Функция register_shutdown_function не вызвана

Это фрагмент моего исходного кода, который я тестирую для обработки ошибки.

Метод FIRST вызывает fatalErrorHandler() , но метод SECOND не вызывает fatalErrorHandler() . Что может быть причиной?

ПЕРВЫЙ

 <?php //error_reporting(0); function fatalErrorHandler() { echo 'YAY IT WORKED'; } # Registering shutdown function register_shutdown_function('fatalErrorHandler'); // let force a Fatal error -- function does not exist functiontest(); echo "hello"; ?> 

вывод:

Неустранимая ошибка: вызов неопределенной функции functiontest () в … test2.php в строке 12 YAY IT WORKED

ВТОРОЙ

  <?php //error_reporting(0); function fatalErrorHandler() { echo 'YAY IT WORKED'; } # Registering shutdown function register_shutdown_function('fatalErrorHandler'); // let force a Fatal error -- function does not exist functiontest(); function foo () { } function foo() { } echo "hello"; ?> 

Вывод:

Неустранимая ошибка: невозможно обновить foo () (ранее объявлено в … test / test2.php: 16) в файле ../test2.php в строке 20

fatalErrorHandler не получает вызов в этом сценарии. Зачем?

В PHP вы можете использовать функцию перед ее определением. Я думаю, это означает, что интерпретатор должен разобрать все функции до того, как он начнет выполнение. Так register_shutdown_function еще не вызывается, когда эта ошибка обнаружена.

Вы можете проверить это, переместив определение дубликатов функций в отдельный файл и включив его в include или require .