php разница между!$a и $a === false
Возможный дубликат:
Является ли!$ Page == false или $page в php?
В чем разница между этими двумя типами проверок? И каков будет правильный способ проверки типов, называемый функциями или методами, которые дают сбой и возвращают false?
if (!is_dir($path)) {...}
или же
if (is_dir($path) === false) {...}
4 ответа
(!is_dir($path)){...}
IF is_dir($path) РАВНО для ложного.
(is_dir($path) === false){...}
IF is_dir($path) имеет значение IDENTIFCAL для false. Это более явно в том смысле, что результат is_dir ($ path) ДОЛЖЕН быть логическим значением FALSE. Больше ничего не подойдет.
Запустите этот пример:
<?php
$var = 0;
if($var == false){
echo 'Var is EQUAL to FALSE.';
}
if($var === false){
echo 'Var is IDENTICAL to FALSE.';
}
?>
Читайте об операторах сравнения здесь.
!$a будет истинным, если $ a установлено в 0, или если $ a не установлено. Тройной знак равенства строго проверяет ложь, а не только значения с нулевым значением.
Я думаю, что это будет легче понять, приведя несколько примеров (вам нужно выполнить команды php в командной строке / терминале)! не является логическим оператором и определяется в документации php как "!$a имеет РЕЗУЛЬТАТ TRUE, если $ a не TRUE."
php -r "$a=NULL; $b = !$a; var_dump($b);"
возвращает bool (true)
php -r "$a=''; $b = !$a; var_dump($b);"
возвращает bool (true)
php -r "$a=array(); $b = !$a; var_dump($b);"
возвращает bool (true)
php -r "$a=false; $b = !$a; var_dump($b);"
возвращает bool (true)
php -r "$a=0; $b = !$a; var_dump($b);"
возвращает bool (true)
php -r "$a=0.0; $b = !$a; var_dump($b);"
возвращает bool (true)
php -r "$a='0'; $b = !$a; var_dump($b);"
возвращает bool (true)
Хотя $a === false будет иметь значение true, только если $ a является actall bollean, а его значение равно false (все остальные распространенные примеры будут ложными с оператором!)
php -r "$a=false; $b = $a === false; var_dump($b);"
возвращает bool (true)
В вашем примере просто используйте не оператор! потому что вам не нужно проверять тип результата is_dir.
===
оператор сравнения "то же значение и тот же тип". Так $foo === false
верно только если $foo
уже bool
тип равен false, тогда как !$foo
будет выполнять различные операции в зависимости от типа $foo
(например, если $foo
является объектом или ресурсом, тогда он проверит, является ли это нулевым значением. Если это строка, тогда она проверяет наличие нуля (и я думаю, что пустая строка тоже, но я не уверен в этом). Если это целое число, то проверяется, равно ли оно нулю или нет. В основном это работает аналогично C !
оператор, прежде чем они добавили тип bool (где логические значения были действительно int
ценности).
В вашем коде оба примера являются "правильными", хотя первый пример, использующий !
оператор, является наиболее кратким и должен быть предпочтительным.