PHP: if (! $ Val) VS if (пусто ($ val)). Есть ли разница? - PullRequest
17 голосов
/ 22 августа 2011

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

$val = 0;

if (!$val) {
  //True
}

if (empty($val) {
  //It's also True
}

Ответы [ 3 ]

25 голосов
/ 22 августа 2011

Посмотрите на таблицу сравнения типов PHP .

Если вы проверите таблицу, вы заметите, что для всех случаев empty($x) соответствует !$x,Так что все сводится к обработке неинициализированных переменных.!$x создает E_NOTICE, а empty($x) - нет.

4 голосов
/ 22 августа 2011

Давай посмотрим:

empty документация:

Следующие вещи считаются empty:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • 0.0 (0 как поплавок)
  • "0" (0 в виде строки)
  • NULL
  • FALSE
  • array() (пустой массив)
  • var $var; (объявленная переменная, но без значения в классе)

логическая документация :

При преобразовании в логическое значение учитываются следующие значения FALSE:

  • логическое значение FALSE само
  • целое число 0 (ноль)
  • Поплавок 0.0 (ноль)
  • пустая строка и строка "0"
  • массив с нулевыми элементами
  • объект с нулевыми переменными-членами (только PHP 4)
  • специальный тип NULL (включая неустановленные переменные)
  • SimpleXML объекты, созданные из пустых тегов

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

4 голосов
/ 22 августа 2011

Если вы используете пустое значение и переменная никогда не была установлена ​​/ создана, предупреждение / ошибка не выдаются.

...