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

问题描述 投票:1回答:1

对于像以下$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}
php
1个回答
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){}似乎你知道你有一个数字我会继续寻找别处。

© www.soinside.com 2019 - 2024. All rights reserved.