2.16. 检查值是否为 null 或 false
使用 === 运算符检查空值和布尔假值。
PHP 宽松的类型系统提供了许多检查变量值的不同方法。然而这也带来了很多问题。如果值实际上是空字符串或 0,则使用 == 检查值是否为 null 或 false 可能会返回误报。 isset() 检查变量的值是否不为 null,但无法检查是否为布尔值 false
。
is_null() 函数准确地检查值是否为null, is_bool() 函数检查值是否为布尔值(如 false
),但还有一个更好的选项: === 运算符检查值是否 完全相同,这与 PHP 的宽松类型系统中的 相等 是不一样的。它也比 is_null()
和 is_bool()
稍微快一点,并且比使用函数进行比较看起来更好。
范例
<?php
$x = 0;
$y = null;
// 判断 $x 是否为 null?
if($x == null){
print('Oops! $x is 0, not null!');
}
// 判断 $y 是否为 null?
if(is_null($y)){
print('Great, but could be faster.');
}
if($y === null){
print('Perfect!');
}
// 字符串 abc 是否包含了字符 a?
if(strpos('abc', 'a')){
// 很清晰!strpos 返回0,表示希望返回第一个字符的位置。
// 但是 PHP 会将 0 理解为 false,所以我们永远不会执行到这个 print 语句!
print('Found it!');
}
// 解决方法: 使用 !== (对 === 取反) 判断 strpos() 是否返回 0 或布尔值 false。
if(strpos('abc', 'a') !== false){
print('Found it for real this time!');
}
要点
- 测试可以返回 0 或布尔值
false
的函数(如strpos()
)的返回值时,请始终使用 === 和 !==,否则你会遇到麻烦。
延伸阅读
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: