Обнаружение недостаточных переменных PHP: FALSE против NULL против unset () против empty ()? - PullRequest
1 голос
/ 21 марта 2009

Как лучше всего определить, что значение не существует в PHP или не подходит для нужд приложения.

$var = NULL, $var = array(), $var = FALSE?

А как лучше всего проверить?

isset($var), empty($var), if($var != NULL), if($var)?

Инициализация переменных такими, какими они будут, например, NULL если строка, array(), если они будут массивами, имеет некоторые преимущества в том, что они будут работать в настройках, к которым они обращаются, без каких-либо неожиданных результатов.

например. foreach($emptyArray) не будет жаловаться, просто ничего не выведет, тогда как foreach($false) будет жаловаться на неверный тип переменной.

Но это кажется ненужной стычкой, когда есть так много разных способов сделать одно и то же. например. if(empty($var)) или if ($var == NULL)

<ч /> Дубликат: Лучший способ проверить существование переменной в PHP; isset () явно не работает

Ответы [ 3 ]

8 голосов
/ 21 марта 2009

Каждая названная вами функция предназначена для разных целей, и их следует использовать соответственно:

  • empty : сообщает, существует ли существующая переменная со значением, которое можно считать пустым (0 для чисел, пустой массив для массивов, равный NULL и т. Д.).
  • isset ($ var) : сообщает, встречал ли скрипт строку до того, где переменная находилась слева от присваивания (т. Е. $ Var = 3;) или любой другой непонятные методы, такие как извлечение , список или eval . Это способ , чтобы определить, установлена ​​ли переменная.
  • $ var == NULL : Это сложно, так как 0 == NULL. Если вы действительно хотите сказать, является ли переменная NULL, вы должны использовать triple =: $ var === NULL.
  • if ($ var) : то же самое, что $ var == NULL.

Как полезная ссылка http://us2.php.net/manual/en/types.comparisons.php.

Способ определения, подходит ли переменная для фрагмента сценария, который вы кодируете, будет полностью зависеть от вашего кода, поэтому нет единого способа проверить его.

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

// Initialize the variable, so we always get an array in this variable without worrying about other code.
$var = array();

if(some_weird_condition){
  $var = array(1, 2, 3);
}

// Will work every time.
foreach($var as $key => $value){
}
1 голос
/ 21 марта 2009

Еще одна вещь, которую следует помнить, это то, что поскольку php либерален в том, что он позволяет оценивать как NULL или пустой, необходимо использовать операторы идентификации (===,! == см. http://php.net/operators.comparison. Это причина почему существуют все эти функции сравнения и равенства, поскольку вам часто приходится различать значения с небольшими различиями.

Если вы явно проверяете NULL, всегда используйте $ var === NULL

0 голосов
/ 21 марта 2009

Мой голос идет за unset (), потому что несуществующие переменные должны генерировать уведомление при использовании.

Тестирование становится немного сложнее, потому что isset () будет иметь значение false, если переменная не существует или равна нулю. (Язык дизайна, если вы спросите меня)

Вы можете использовать array_key_exists () для допустимых значений в $ GLOBALS, $ _POST и т. Д.
Для свойств класса есть property_exists ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...