Почему is_null создает исключение для неустановленной переменной - PullRequest
1 голос
/ 24 февраля 2020

Глубоко внутри команды терминала Laravel У меня есть следующий код:


<?php
/* ... */

class TrackShipment extends Command
{

   /* ... */

    public function handle()
    {
      /* ... */
         if (is_null($eventHook) || $eventHook->uri != $statusHook->uri) {
          /* ... */
         }
     }
}

, когда эта часть кода исполняется, процесс умирает со следующим исключением

ErrorException  : Undefined variable: eventHook

, которое Удивительно, потому что я использовал подобный код во всех местах, и PHP вернет true, когда is_null вызывается для неустановленной переменной, хотя он будет жаловаться на это на stderr с уведомлением.

Я предполагаю, что Laravel корректирует настройки PHP из своего кода, чтобы is_null выбрасывал исключение вместо того, чтобы печатать уведомление в stderr. Что это за настройка? Как бы я повторил исключение в ванили php7 .2?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Функция is_null вызывает уведомление, если переменная не определена. Laravel преобразует это уведомление в исключение.

Существует две функции, которые можно использовать для проверки неопределенной переменной, которая не вызовет уведомление.

  1. isset https://www.php.net/manual/en/function.isset.php
  2. empty https://www.php.net/manual/en/function.empty.php

Первое вернет false для нуля, поэтому вы должны его отрицать.

1 голос
/ 24 февраля 2020

Laravel, скорее всего, использует set_error_handler для установки пользовательской функции обработчика ошибок:

https://www.php.net/manual/en/function.set-error-handler.php

, где вы можете определить собственный способ менеджера ошибки.

Вот где: https://github.com/laravel/framework/blob/a05b9dcb3b1e8069b59a9af90d0b157c30382131/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php#L43

Извините за предыдущий ответ.

...