【发布时间】: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
运行 CodeSniffer PHP 样式测试给了我以下错误:
The use of function is_null() is forbidden
Squiz.PHP.ForbiddenFunctions.Found
为什么禁止使用 is_null()?
【问题讨论】:
标签: php isnull codesniffer
为了保持一致性,我们在 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 不同,除非您可以确定 $var 是 boolean。我个人用另一种语言的体验很糟糕。
$var !== TRUE 并不意味着$var === FALSE。但是当您检查像$isConnected 这样的变量时,我们并不真正关心如果不是TRUE 的值是多少;即使值为0、NULL、FALSE 或'error219',您显然也没有连接。但如果我只使用if ($isConnected) {... 并且值为'error219',那么该IF 语句将评估为TRUE,这是我不想要的。如果您要检查不同的值,则可能需要在其中添加一些 ELSE 子句,具体取决于确切值的重要性。