在PHP中使用'0'作为数字时,我应该采取什么预防措施?

时间:2009-09-03 23:55:45

标签: php

在PHP中0被视为布尔值false。因此,每当我遇到一个函数必须返回一个数值而我返回0,或者我有一个MySQL bool列,其值可能为0/1时,我会使用代码如下:

$active=(isActive()) ? 1 : 0;
$this->db->set('isActive',$active);

我心里想到0可能会转换为null或空字符串,例如""

我需要采取哪些预防措施才能将0始终视为整体,而不是其他任何东西?

7 个答案:

答案 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;