«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/12/28 10:29:09  №2250319 1
Чому так?
$var = array(null);
var_dump(empty($var)); //false
var_dump(isset($var)); //true
Ответы: >>2250324 >>2250910 >>2251983
Аноним 2021/12/28 21:12:36  №2250910 2
>>2250319

В программировании ты должен полагаться не на интуицию ("это значение выглядит пустым"), а на определения из документации (какие значения считаются пустыми).

Вот, что написано в мануале про empty: https://www.php.net/manual/ru/function.empty.php

> Возвращает false, если var существует и содержит непустое ... значение...

Соответственно, true возвращается, если переменная не существует либо она содержит "пустое" (falsey) значение.

Что такое "пустое значение"? Это описано тут: https://www.php.net/manual/ru/language.types.boolean.php#language.types.boolean.casting

> При преобразовании в bool, следующие значения рассматриваются как false:

> само значение boolean false
> integer 0 (ноль)
> float 0.0 (ноль) и -0.0 (минус ноль)
> пустая строка, и строка "0"
> массив без элементов
> особый тип NULL (включая неустановленные переменные)
> объекты SimpleXML, созданные из пустых элементов без атрибутов, то есть элементов, не имеющих ни дочерних элементов, ни атрибутов.

Твой массив [null] не подпадает под определение "пустого" значения, так как он непустой - в нем есть один элемент. Следовательно, empty возвращает false.

Что касается isset, то с ним еще проще: он вернет true, если переменная существует и она не равна null. Переменная существует, массив с одним элементом [null] не равен null, потому isset вернет true.