PHP: if (!$val) VS if (пустой ($val)). Есть какая-то разница?

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

$val = 0;

if (!$val) {
  //True
}

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

3 ответов


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

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


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


давайте посмотрим:

empty документы:

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

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

документация булевых:

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

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

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