PHP: if (! $ Val) VS if (empty ($ val)). Есть ли разница?

Мне было интересно, какая разница в двух случаях ниже, и какой из них рекомендуется?

$val = 0; if (!$val) { //True } if (empty($val) { //It's also True } 

Related of "PHP: if (! $ Val) VS if (empty ($ val)). Есть ли разница?"

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