php之间的区别!$ a和$ a === false

时间:2012-11-18 11:39:27

标签: php booleanquery

  

可能重复:
  Is !$page == false or $page in php?

这两种检查有什么区别?哪种类型检查的正确方法是被调用的函数或方法失败并返回false?

if (!is_dir($path)) {...}

if (is_dir($path) === false) {...}

4 个答案:

答案 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结果的类型。