这两种支票有什么区别?哪种类型检查称为失败并返回 false 的函数或方法的正确方法?
if (!is_dir($path)) {...}
或者
if (is_dir($path) === false) {...}
这两种支票有什么区别?哪种类型检查称为失败并返回 false 的函数或方法的正确方法?
if (!is_dir($path)) {...}
或者
if (is_dir($path) === false) {...}
(!is_dir($path)){...}
IF is_dir($path)等于false。
(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 设置为 0,或者 $a 未设置,则 !$a 将为真。三等号严格检查是否为假,而不仅仅是空值。
运算符===
是“同值同类型”比较。所以只有当已经是一个等于假的类型$foo === false
时才为真,而将根据类型执行不同的操作(例如,如果是对象或资源,那么它会检查它是否为空值。如果它是一个字符串,那么它检查 null (我也认为是一个空字符串,但我不确定)。如果它是一个整数,那么它会检查它是否为零。基本上它在添加 bool 类型之前类似于 C 的运算符(其中 boolean价值观确实是价值观)。$foo
bool
!$foo
$foo
$foo
!
int
在您的代码中,这两个示例都是“正确的”,尽管第一个示例使用!
运算符是最简洁的,应该是首选。
我认为通过给出一些示例会更容易理解(您需要在命令提示符/终端中执行php命令)!不是逻辑运算符,它由 php 文档定义为“!如果 $a 不为 TRUE,则 $a 的结果为 TRUE。”
php -r "$a=NULL; $b = !$a; var_dump($b);"
返回布尔(真)
php -r "$a=''; $b = !$a; var_dump($b);"
返回布尔(真)
php -r "$a=array(); $b = !$a; var_dump($b);"
返回布尔(真)
php -r "$a=false; $b = !$a; var_dump($b);"
返回布尔(真)
php -r "$a=0; $b = !$a; var_dump($b);"
返回布尔(真)
php -r "$a=0.0; $b = !$a; var_dump($b);"
返回布尔(真)
php -r "$a='0'; $b = !$a; var_dump($b);"
返回布尔(真)
虽然 $a === false 只有当 $a 是实际的布尔值并且它的值为 false 时才会为真(所有其他先前的例子都将是错误的 ! 运算符)
php -r "$a=false; $b = $a === false; var_dump($b);"
返回布尔(真)
在您的示例中,只需使用 not 运算符!因为您不需要检查 is_dir 结果的类型。