使用比较运算符是否始终与ctype_digit()或is_numeric()相同?

时间:2017-12-18 18:05:20

标签: php

对于类似以下$p = $_GET['page']

的变量

在以下情况下

if ($p > 0)
if ($p < 0)
if ($p >= 0)
if ($p <= 0)
if ($p == 0)

相同吗?
if (ctype_digit($p)){//Logic}
//or...
if (is_numeric($p)){//Logic}

1 个答案:

答案 0 :(得分:0)

我的建议是传递正确的作业数据类型。因此,如果您需要将数字传递给此代码。

如果您无法控制传递的内容,请先检查它是什么。这使您在代码开始中断时再看一下。我会使用is_numeric,因为它知道负片和浮点数不像ctype_digit

is_numeric("-10"); //TRUE 
ctype_digit("-10"); //FALSE
is_numeric("12.10"); //TRUE 
ctype_digit("12.10"); //FALSE

所以最后你会想做类似的事情:

$p = $_GET['page'];

if(is_numeric($p)){
    $p = (int)$p;
    //Do stuff with an int
} else {
    //Not sure what should happen here...
}

PHP非常灵活,可以为我们投射,但是当你尝试在你的代码中找到一个错误时,很难找到你表现得很好的一切,if($p>0){}似乎你知道你有一个号码,我会继续寻找其他地方。