Подтвердить что ты не робот

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

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

$val = 0;

if (!$val) {
  //True
}

if (empty($val) {
  //It also True
}
4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

Посмотрим:

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

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

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

Булева документация:

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

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

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