<?php // $smith = ""; $submit ="button_a"; if($submit == "button_a") { $smith = "button_a"; } elseif($submit == "button_b"){ $smith = "button_b"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body> <p> <?php echo($smith); ?> </p> </body> </html>
PHPSTORM предоставляет флаг для каждого файла: Красный – Ошибки, Желтый – Предупреждение, Зеленый – ОК.
PHP над заголовком присваивает значение $ smith. В теле я получаю предупреждение от $ smith, говоря, что он может быть неопределенным. Если я объявляю всю переменную в верхней части кода PHP, ($ smith = "";), она счастлива (без предупреждения).
Есть ли что-то, что я должен делать, чтобы предотвратить эти предупреждения?
Мне не нравится идея добавления комментария к каждому, кто говорит, чтобы не проверять его, и я не хочу их отключать.
Это происходит очень часто, когда я включаю файл db_login.php, который определяет четыре или пять переменных. У меня есть разные файлы db_login.php для WAMP, MAMP и реального шланга.
Есть предположения?
Вы можете сообщить PHPStorm игнорировать отчеты неопределенных переменных, если require on include statement находятся в одном потоке выполнения перед доступом к переменной. Вы найдете его в «Неопределенной переменной» – Игнорировать «include» и «require» . Он включен по умолчанию, поэтому его следует отключить.
Примечание. Параметр находится в « File > Settings (Ctrl+Alt+S) > Project Settings > Inspections > PHP > Undefined > Undefined variable
Да, есть две вещи, которые вы можете сделать, чтобы избавиться от этого предупреждения. Что ты сказал:
$smith = ""; if($submit == "button_a") { $smith = "button_a"; } elseif($submit == "button_b"){ $smith = "button_b"; }
Или проверьте, установлено ли это при печати:
<?php if( isset( $smith)) { echo($smith); } ?>
Однако это всего лишь предупреждение, и вы даете знать, что существует условие, что $smith
не будет определен (когда $submit
не является "button_a"
и не является "button_b"
). Если это условие должно было произойти, вы бы печатали $smith
когда он не был установлен, что может быть ошибкой в вашем скрипте.