Каков наилучший способ определить, что значение не существует в 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)
Каждая функция, которую вы назвали, предназначена для разных целей, и их следует использовать соответственно:
Полезной ссылкой является 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 ().