【问题标题】:Why should is_null() not be used?为什么不应该使用 is_null() ?
【发布时间】:2021-11-22 04:02:13
【问题描述】:

运行 CodeSniffer PHP 样式测试给了我以下错误:

The use of function is_null() is forbidden    
Squiz.PHP.ForbiddenFunctions.Found

为什么禁止使用 is_null()?

【问题讨论】:

    标签: php isnull codesniffer


    【解决方案1】:

    为了保持一致性,我们在 Squiz 标准中实施了这条规则。

    标准的另一部分禁止隐含表达,例如if ($var) {...。所以你需要写if ($var === TRUE) {...

    因此,NULL 值的比较如下所示:

    if (is_null($var) === TRUE) {
    }
    

    考虑到你已经写了比较的后半部分,写起来更容易:

    if ($var === NULL) {
    }
    

    这样代码更简单,但也(更重要的是)更符合我们做事的方式。

    这是唯一的原因。我们不关心性能,is_null() 函数本身也没有任何问题。据我所知,它工作正常。

    【讨论】:

    • 但是$var === TRUE的结果不是另一个布尔值吗?所以你实际上应该写($var === TRUE) === TRUE。等等等等....
    • 是的,结果是一个布尔值,这就是重点。 $var 本身可能不是布尔值,但 IF 语句会将其强制转换为 1 并解释结果。使用 === 强制进行相等和类型检查只是确保开发人员(编写和阅读代码)知道他们正在存储和使用什么值。
    • 我明白了...但是您基本上是在重新定义真实值,并且 $var === TRUE$var !== FALSE 不同,除非您可以确定 $varboolean。我个人用另一种语言的体验很糟糕。
    • 是的,因为$var !== TRUE 并不意味着$var === FALSE。但是当您检查像$isConnected 这样的变量时,我们并不真正关心如果不是TRUE 的值是多少;即使值为0NULLFALSE'error219',您显然也没有连接。但如果我只使用if ($isConnected) {... 并且值为'error219',那么该IF 语句将评估为TRUE,这是我不想要的。如果您要检查不同的值,则可能需要在其中添加一些 ELSE 子句,具体取决于确切值的重要性。
    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 2010-12-22
    • 2014-03-25
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    相关资源
    最近更新 更多