PHP: if (! $Val) VS if (empty ($ val)). Есть ли разница?
Мне было интересно, какая разница в двух случаях ниже, и какой из них рекомендуется?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It also True
}
Ответы
Ответ 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
. Все остальное, похоже, дает тот же результат (если вы, конечно, инвертируете булевский листинг).