Это действительно PHP для отображения несуществующей переменной? - PullRequest
0 голосов
/ 04 марта 2011

Я использую этот код на своих отдельных страницах для создания уникального заголовка и активной вкладки.

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\"";
    include "header.php"; 
?>

И я использую этот код в моем header.php для выполнения этих различий.

<title><?php echo $title; ?></title>

<ul id="nav">
   <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li>
   <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li>
   <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li>
</ul>

Что меня больше всего интересует, так как я новичок в PHP, это ... Допустимо ли просто отображать несуществующую переменную?Я имею в виду ... это работает, и это не ошибка.Но мне было просто интересно, если это плохое программирование.

Заранее спасибо.

РАЗРЕШЕНО

В конце дня все обсуждениезавершить, и это то, что я нашел наиболее целесообразным в моем конкретном сценарии:

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\"";
    $about = $contact = "";
    include "header.php";
?>

И вызов переменных такой же, как и раньше:

<ul id="nav">
   <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li>
   <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li>
   <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li>
</ul>

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

Лучшей практикой программирования было бы проверить, установлен ли он первым. Такие как

if (isset($variable))
  echo $variable;
4 голосов
/ 04 марта 2011

Да, это всегда плохое программирование, чтобы отобразить (и любое другое использование) несуществующую переменную.
И это на самом деле ошибки - вы просто не видите это из-за неправильных настроек 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, и инициализировать ее элементы значениями, правильно подготовленными из необработанной внешней переменной.

2 голосов
/ 04 марта 2011

Будет выдано предупреждение, см. PHP: печать неопределенных переменных без предупреждения , но, видите ли вы, зависит ли это от вашего уровня сообщений об ошибках.

...