Простой вопрос: в php для var установлено значение null такое же, как для undefined?
Кроме того, какой самый простой способ проверить это var null?
Как использовать эту функциональность, не нарушая код, например. установив что-то необязательное в массиве конфигурации, который может быть установлен в null
,
Если проверить для null
с is_null
потенциально может нарушить код, если var не определен.
is_null
полностью противоположна isset
, но может использоваться только и только если вы уверены, что переменная определена. Для всех остальных случаев выглядит так, что isset
более подходящий.
И проверить null
, isset
не подходит, это?
Так что вар может быть:
is_*
функции (numeric
, string
, array
, …)var, установленный в NULL, отличается от undefined.
<?php
if (is_null($undefinedvariable)) {
echo 'This variable is NULL';
}
Этот код демонстрирует, как может возникнуть путаница, так как это приведет к отображению сообщения «Эта переменная NULL», однако оно также сгенерирует уведомление «Неопределенная переменная». (при условии, что $ undefinedvariable на самом деле не определено, конечно!)
Когда я задаю этот вопрос, я часто обращаюсь к этому сайту:
https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/
Он предоставит вам список всех эквивалентностей и их истинности.
(undefined $var) == !isset($var) == empty($var) == is_null($var)
(var $var;) == !isset($var) == empty($var) == is_null($var)
($var = NULL) == !isset($var) == empty($var) == is_null($var)
Так что, да, оба эквивалентны.
Остальная часть вашего вопроса усложняется (в IDEOne):
<table><tr><td>Key</td><td>array_key_exists()</td><td>isset()</td><td>empty()</td><td>is_null()</td></tr><tr><td>$array['null']</td><td>true</td><td>false</td><td>true</td><td>true</td></tr><tr><td>$array['empty']</td><td>true</td><td>true</td><td>true</td><td>false</td></tr><tr><td>$array['zero']</td><td>true</td><td>true</td><td>true</td><td>false</td></tr><tr><td>$array['space']</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>$array['character']</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>$array['true']</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>$array['false']</td><td>true</td><td>true</td><td>true</td><td>false</td></tr><tr><td>$array['undefined']</td><td>false</td><td>false</td><td>true</td><td>true</td></tr></table>
Если вы хотите сделать неявные проверки, вы должны сделать комбинацию:
if(array_key_exists($key, $array) {
$check = $array[$key];
if($check === NULL) {
// set and null
} elseif ($check === FALSE) {
// set and FALSE
} elseif ( /** additional checks, etc, etc... **/ ) { }
} else {
// Not set
}
К сожалению, если переменная не находится в массиве, это не возможно сделать без ‘get_defined_vars () `, и я бы очень не рекомендовал использовать ее в рабочем коде, так как она израсходует память из-за данных, на которые нет ссылок (объекты будет представлен ссылкой, но это будет дублировать все остальные переменные, вызывая резкое увеличение памяти).
Хорошей практикой является просто учитывать, что undefined == !isset == NULL == empty
, Потому что то, что вы ищете, это данные, а никакие данные — это не данные.
В этот страница выглядит так, как будто это НЕ то же самое, но действует так, как есть.
Проверять:
!(isset($var) || array_key_exists('var',get_defined_vars())))
array_key_exists('var', get_defined_vars()) && is_null($var)
isset($var) && empty($var)
isset($var) && !empty($var)
+ любой другой, если_ * конкретный.Чтобы сделать такую же проверку с моим массивом конфигурации вместо get_defined_vars()
Я просто использовал $configArr
, и он может быть использован любой другой массив, как отфильтрованный POST.
Чтобы проверить ноль:
$configArr = array('var' => null);
$isNull = array_key_exists('var', $configArr) && is_null($configArr['var']);
Примеры
Array
(
[str] => Array
(
[isset] => TRUE
[is_null] => FALSE
[empty] => FALSE
[array_key_exist] => TRUE
[array_key_exist + is_null] => FALSE
)
[empty] => Array
(
[isset] => TRUE
[is_null] => FALSE
[empty] => TRUE
[array_key_exist] => TRUE
[array_key_exist + is_null] => FALSE
)
[null] => Array
(
[isset] => FALSE
[is_null] => TRUE
[empty] => TRUE
[array_key_exist] => TRUE
[array_key_exist + is_null] => TRUE
)
[undefined] => Array
(
[isset] => FALSE
[is_null] => TRUE
[empty] => TRUE
[array_key_exist] => FALSE
[array_key_exist + is_null] => FALSE
)
)
Конечный результат:
$pRes = (!array_key_exists('var', $arrayOfVars)
? 0 // undefined
: (is_null($arrayOfVars['var'])
? 1 // -> null
: (empty($arrayOfVars['var']
? 2 // -> empty
: 3 // -> custom
)
)
);