Мне было интересно, какая разница в двух случаях ниже, и какой из них рекомендуется?
$val = 0; if (!$val) { //True } if (empty($val) { //It's also True }
Посмотрите на таблицу сравнения типов PHP .
Если вы проверите таблицу, вы заметите, что для всех случаев empty($x)
такая же, как !$x
Таким образом, это сводится к обработке неинициализированных переменных. !$x
создает E_NOTICE
, а empty($x)
– нет.
Если вы используете пустой, и переменная никогда не была установлена / не создана, никаких предупреждений / ошибок не будет.
Давайте посмотрим:
empty
документация:
Следующие вещи считаются
empty
:
""
(пустая строка)0
(0
как целое число)0.0
(0
в качестве поплавка)"0"
(0
в виде строки)NULL
FALSE
array()
(пустой массив)var $var;
(объявленная переменная, но без значения в классе)
Булевая документация :
При преобразовании в boolean следующие значения считаются
FALSE
:
- сама логическая
FALSE
- целое число
0
(ноль)- поплавок
0.0
(ноль)- пустая строка и строка
"0"
- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только для PHP 4)
- специальный тип
NULL
(включая неустановленные переменные)- Объекты
SimpleXML
созданные из пустых тегов
Кажется, единственное различие (относительно результирующего значения) заключается в том, как SimpleXML
экземпляр SimpleXML
. Все остальное, похоже, дает тот же результат (если вы, конечно, инвертируете булевский бросок).