Исправление ошибки "Notice: undefined variable" в PHP

Александр Кичатов

Почему возникает ошибка

Ошибка undefined variable появляется при попытке обратиться к не существующей (не объявленной ранее) переменной:
<?php
echo $text;

Если в настройках PHP включено отображение ошибок уровня E_NOTICE, то при запуске этого кода в браузер выведется ошибка:

Notice: Undefined variable: text in D:\Programs\OpenServer\domains\test.local\index.php on line 2

Как исправить ошибку

Нужно объявить переменную перед обращением к ней:

$a = '';
echo $a;

Нет уверенности, что переменная будет существовать? Можно указать значение по-умолчанию:

<?php
if(!isset($text))
    $text = '';

echo $text;

Или сокращённые варианты:

<?php
// С оператором объединения с null (PHP 7+)
$text = $text ?? '';

// С оператором присваивания значения null (PHP 7.4+)
$text ??= '';

Есть ещё один вариант исправления этой ошибки - отключить отображение ошибок уровня E_NOTICE:

<?php
error_reporting(E_ALL & ~E_NOTICE);
echo $a; // Ошибки не будет

Не рекомендую этот вариант. Скрытие ошибок вместо их исправления - не совсем правильный подход.

Кроме этого, начиная с PHP 8 ошибка undefined variable перестанет относиться к E_NOTICEи так легко отключить её уже не удастся.

Если ошибка появилась при смене хостинга

Часто ошибка возникает при переезде с одного сервера на другой. Практически всегда причина связана с разными настройками отображения ошибок на серверах.

По-умолчанию PHP не отображает ошибки уровня E_Notice, но многие хостинг-провайдеры предпочитают настраивать более строгий контроль ошибок. Т.е. на старом сервере ошибки уже были, но игнорировались сервером, а новый сервер таких вольностей не допускает.

Остались вопросы? Добро пожаловать в комментарии. :)

Комментарии