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())的返回值时,请始终使用 === 和 !==,否则你会遇到麻烦。

延伸阅读

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/phpbestpractice...

译文地址:https://learnku.com/docs/phpbestpractice...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~