Intereting Posts

Обнаружение недостаточных переменных PHP: FALSE vs NULL vs unset () vs empty ()?

Каков наилучший способ определить, что значение не существует в 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 () явно сломан

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

  • empty : указывает, существует ли существующая переменная со значением, которое можно считать пустым (0 для чисел, пустой массив для массивов, равный NULL и т. д.).
  • isset ($ var) : указывает, встречался ли скрипт в строке до того, где переменная была левой стороной присвоения (т.е. $ var = 3;) или любых других неясных методов, таких как extract , list или 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){ } 

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

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

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

Тестирование становится немного сложнее, потому что isset () wil будет false, если переменная «не существует» или null. (Language designflaw, если вы спросите меня)

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