Да, это всегда плохое программирование, чтобы отобразить (и любое другое использование) несуществующую переменную.
И это на самом деле ошибки - вы просто не видите это из-за неправильных настроек PHP.
error_reporting(E_ALL);
в верхней части скрипта покажет вам эти ошибки.
Хотя PHP едва ли допускает использование неопределенной переменной, хорошей практикой программирования является для определения каждой переменной в коде перед ее использованием .
Это позволит вам избежать многочисленных ошибок, неожиданного поведения или даже серьезных уязвимостей.
Большинство людей, однако, принимают эту проблему неправильно, думая, что переменная должна быть проверена на наличие перед использованием.Но если немного подумать над этой темой, вы найдете ее довольно нелепой - похоже, единственное намерение такой проверки состоит в том, чтобы выдать сообщение об ошибке.Итак, разработчики языка изобрели такое предупреждение только для того, чтобы беспокоить программиста ненужной проверкой?
Конечно, нет.
Реальное намерение этого предупреждения (как и любого другого предупреждения) состоит в том, чтобы сообщить программисту, что что-то идет не так.
Это действительно очень просто: PHP просто говорит вам "Не забудь присвоить какое-то значение этой переменной, братан? Кажется, ты собираешься использовать его, поэтому ожидаешь некоторого значения, но это не так. Просто, чтобы ты знал." Но с помощью isset () мы просто отключаем это предупреждение и ничего более.Оказывать медвежью услугу себе.
Более того, инициализируя переменную, можно быть уверенным как в существовании переменной , так и в ее значении.
небольшой пример:
<?
while ($i < 10) {
echo $i." ";
}
echo "<br>";
while ($i < 10) {
echo $i." ";
}
?>
Сколько строк напечатает этот фрагмент?Только один.
Таким образом, каждая переменная сценария должна быть инициализирована перед использованием.
Особое значение имеет внешние переменные .
Программист не может контролировать свое поведение.И иногда существование внешней переменной - это случай логики приложения.Например:
if (isset($_GET['id'])) {
//displays particular article
} else {
//displays list of articles
}
Этот способ разрешен для проверки.
Но использование необработанных внешних переменных должно быть строго ограничено.
Например, если вы собираетесь заполнять поля формы ранееПосле ввода значений рекомендуется создать другую переменную, скажем, $ FORM, и инициализировать ее элементы значениями, правильно подготовленными из необработанной внешней переменной.