Мне было интересно, какая разница в двух случаях ниже, и какой из них рекомендуется?
$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в виде строки)NULLFALSEarray()(пустой массив)var $var;(объявленная переменная, но без значения в классе)
Булевая документация :
При преобразовании в boolean следующие значения считаются
FALSE:
- сама логическая
FALSE- целое число
0(ноль)- поплавок
0.0(ноль)- пустая строка и строка
"0"- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только для PHP 4)
- специальный тип
NULL(включая неустановленные переменные)- Объекты
SimpleXMLсозданные из пустых тегов
Кажется, единственное различие (относительно результирующего значения) заключается в том, как SimpleXML экземпляр SimpleXML . Все остальное, похоже, дает тот же результат (если вы, конечно, инвертируете булевский бросок).