代码之家  ›  专栏  ›  技术社区  ›  Ali

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

php
  •  1
  • Ali  · 技术社区  · 15 年前

    在PHP中 0 被视为布尔值错误。因此,每当我遇到一个函数必须返回一个数值并且返回0的情况,或者当我有一个MySQL时 bool 可能值为的列 0/1 ,我使用这样的代码:

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

    我有种感觉,在我的脑海里, 可能转换为 null 或空字符串,例如 "" .

    我需要采取什么预防措施 总是被当作一只雄鹿而不是别的什么?

    7 回复  |  直到 15 年前
        1
  •  1
  •   staticsan    15 年前

    有几个地方 0 '0' 有点特别对待。这几乎总是因为自动式燃烧。你已经注意到了 评估为 false . 所以如果PHP有理由转换 “0” 对于一个整数,则该值也将计算为false。最值得注意的是 empty() 功能。这是有记录的,顺便说一句。

    我很少使用 空() 因为这个问题,事实上。更窄的检查范围更有意义,因此我使用 isset() ,请 is_null() === false 甚至 == 0 (或) != 0 )还有其他支票。我有数据库处理程序代码,它不仅检查 iSnull() 但也确实如此 is_numeric() .

    其他需要注意的地方是使用其他开发人员的代码的地方,这些代码并不完全注意如何 工作于自动式空调。如果你给一个函数a 但最终它使用了 null 当它应该使用 然后,您可能在API中发现了一个bug,应该与开发人员一起提出它。事实上,他们可能正在使用 空() 什么时候应该使用 ISSET() 和/或 iSnull() . -)

        2
  •  4
  •   Fiarr    15 年前

    如果希望php计算一个只有“false”的语句,请使用==而不是通常的==

        3
  •  2
  •   Scott    15 年前

    PHP允许您将变量强制转换为某种类型。

    <?php
    
       $value = (bool) 0; 
       $value3 = (int) 3; 
    
    ?>
    

    如果您总是希望0被视为int,请将其强制转换为一。

        4
  •  1
  •   Amber    15 年前

    一个也没有。0是0,即使逻辑计算认为它是一个错误值,也不会改变它的 实际的 价值。

        5
  •  1
  •   Josh Davis    15 年前

    我找不到一个PHP可以转换的案例 0 null "" . 如果必须将其转换为字符串,则 "0" ,对于布尔值, false .没有“空”类型,所以实际上 使用PHP是安全的。 转换为 (空字符串)当转换为字符串时,但整数是安全的。

    现在不能保证第三方代码在传递一个整数时不会表现得很奇怪,因为他们希望得到其他东西,但您基本上是安全的。

        6
  •  0
  •   mauris    15 年前

    如果将变量设置为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);
    }
    

    希望这有帮助!

        7
  •  -1
  •   mbelos    15 年前

    使用==比较运算符是最好的,因为它检查类型及其值是否相等。在PHP中,如果执行以下操作:

    您的最佳选择是尽可能使用“真”和“假”,而不是为标志设置1和0。在您的示例中,请执行以下操作:

    $active=(isActive()) ? true : false;
    

    或者更好(假设isactive返回正确的布尔值):

    $this->db->set('isActive',isActive());
    

    而不是:

    $active=(isActive()) ? 1 : 0;