这两种检查有什么区别?哪种类型检查的正确方法是被调用的函数或方法失败并返回false?
if (!is_dir($path)) {...}
或
if (is_dir($path) === false) {...}
答案 0 :(得分:1)
!如果$ a设置为0,或者如果$ a未设置,$ a将为true。三等号严格检查错误,而不仅仅是null-ish值。
答案 1 :(得分:1)
(!is_dir($path)){...}
如果is_dir($ path) EQUAL 为false。
(is_dir($path) === false){...}
如果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.';
}
?>
阅读比较运算符here。
答案 2 :(得分:0)
===
运算符是“相同值和相同类型”的比较。因此$foo === false
仅在$foo
已经是bool
类型等于false的情况下才为真,而!$foo
将执行不同的操作,具体取决于$foo
的类型(对于$foo
例如,如果!
是一个对象或资源,那么它将检查它是否为空值。如果它是一个字符串,那么它检查null(我认为也是一个空字符串,但我不确定)如果它是一个整数,那么它会检查它是否为零。基本上它在添加bool类型(其中布尔值实际为int
值)之前与C的!
运算符类似。
在您的代码中,两个示例都是“正确的”,尽管使用{{1}}运算符的第一个示例是最简洁的,应该是首选。
答案 3 :(得分:0)
我认为通过举一些例子(你需要在命令提示符/终端中执行php命令)会更容易理解 !不是逻辑运算符,它由php文档定义为“!$ a如果$ a不为TRUE,则结果为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只有当$ a确实为bollean并且其值为false时才会为真(所有其他有关的例子都将为false运算符)
php -r "$a=false; $b = $a === false; var_dump($b);"
返回bool(true)
在你的例子中,只使用not operator!因为你不需要检查is_dir结果的类型。