在PHP中0
被视为布尔值false。因此,每当我遇到一个函数必须返回一个数值而我返回0,或者我有一个MySQL bool
列,其值可能为0/1
时,我会使用代码如下:
$active=(isActive()) ? 1 : 0;
$this->db->set('isActive',$active);
我心里想到0
可能会转换为null
或空字符串,例如""
。
我需要采取哪些预防措施才能将0
始终视为整体,而不是其他任何东西?
答案 0 :(得分:4)
如果您希望PHP评估一个声明,其中'false'是唯一的'false',请使用===代替通常的==
答案 1 :(得分:2)
PHP允许您将变量转换为特定类型。
<?php
$value = (bool) 0;
$value3 = (int) 3;
?>
如果您始终希望将0视为一个int,则将其转换为一个。
答案 2 :(得分:1)
无。 0为0,即使逻辑评估认为它是假值,也不会改变其实际值。
答案 3 :(得分:1)
我找不到PHP将0
转换为null
或""
的单个案例。如果必须将其转换为字符串,则为"0"
,布尔值为false
。没有“null”类型,所以你的0
对PHP来说是安全的。当作为字符串强制转换时,false
被转换为""
(空字符串),但整数是安全的。
现在不能保证第三方代码在传递整数时不会出现奇怪的行为,当他们期待别的东西时,你就会非常安全。
答案 4 :(得分:1)
有几个地方0
和'0'
被特别对待。这几乎总是因为自动类型共存。您已经注意到0
评估到false
的位置。因此,如果PHP有理由将'0'
转换为整数,那么它也将评估为false。值得注意的是empty()
功能。这是BTW记录的。
事实上,我很少使用empty()
因为这个问题。更狭义地检查更有意义,因此我使用isset()
,is_null()
和=== false
或甚至== 0
(或!= 0
)。还有其他检查。我有数据库处理程序代码,不仅使用is_null()
进行检查,还执行is_numeric()
。
其他值得注意的地方是您使用其他开发人员的代码,他们对0
在自动类型协作中的工作方式并不十分谨慎。如果你给一个函数0
,但当它应该使用null
时,它最终会使用0
,那么你可能在API中发现了一个错误并应该使用开发商。事实上,当他们使用empty()
和/或isset()
时,他们可能正在使用is_null()
。 : - )
答案 5 :(得分:0)
如果将变量设置为0,则变量将保持为0,除非您将其转换为其他变量。类型仍然是整数。
您可以使用is_numeric()函数检查变量是否正确。
示例:
$active=(isActive()) ? 1 : 0;
if(is_numeric($active)){
$this->db->set('isActive',$active);
}
或者您可以使用比较运算符===而不是通常的==。它将比较数据类型以及变量的内容。
$active=(isActive()) ? 1 : 0;
if($active === 0 || $active === 1){
$this->db->set('isActive',$active);
}
希望这有帮助!
答案 6 :(得分:-1)
使用===比较运算符是最好的,因为它检查类型是否相等以及它们的值。在php中如果你这样做:
您最好的选择是尽可能使用true和false,而不是为标志设置1和0。在您的示例中,执行:
$active=(isActive()) ? true : false;
甚至更好(假设isActive返回一个合适的布尔值):
$this->db->set('isActive',isActive());
而不是:
$active=(isActive()) ? 1 : 0;