PHP - 必须使用is_numeric(),还是可以使用比较符号来处理所有正数字情况?

ina*_*ina 3 php math evaluation numeric isnumeric

似乎简单的比较符号>,>=及其反向组件可以评估某个变量是否为数字.例$whatami='beast'; ($whatami<0)?echo 'NaN':echo 'is numeric!';

是否存在正值(数量> 0)is_numeric()需要使用的情况?似乎使用上面的比较符号将确定变量是否为数字.

TCC*_*CCV 5

正如我已经发现的那样,很多这些辅助函数确实是必需的,因为PHP不是强类型的.本周早些时候,我发布了类似的问题(虽然不是那么相似).需要注意的一点是,在某些情况下(当存在混合类型时),PHP会将您的字符串更改为其整数值以进行比较.这不容忽视.我认为这是一个很好的例子is_numeric

来自PHP手册

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串将转换为数字,并且数字执行比较.这些规则也适用于switch语句.当比较为===或!==时,不会发生类型转换,因为这涉及比较类型和值.

要考虑的另一件事是PHP中的"0是什么".那意义重大.它并不总是数字.它可能是数字字符串,布尔值false,整数等...这就是存在这些辅助函数的原因.

要添加到我的答案:

改变你的榜样:

$whatami='beast';  
($whatami<5) ? echo 'less than 5' : echo 'more than 5';
Run Code Online (Sandbox Code Playgroud)

PHP会将'beast'更改为等效的整数,然后进行比较.这会产生意想不到的结果.如果你真的想要类似的东西,你必须用另一个条件包装它:

$whatami='beauty';  
if(is_numeric($whatami){
    ($whatami<5) ? echo 'less than 5' : echo 'more than 5';
} else {
    exit('what, am I not pretty enough for a beast?');
}
Run Code Online (Sandbox Code Playgroud)

然后你会得到你想要的结果(尽可能奇怪).