似乎简单的比较符号>,>=
及其反向组件可以评估某个变量是否为数字。示例$whatami='beast'; ($whatami<0)?echo 'NaN':echo 'is numeric!';
正值(数字&gt; 0)是否需要使用is_numeric()
?似乎使用上面的比较符号将确定变量是否为数字..
答案 0 :(得分:5)
正如我一直在发现的那样,很多这些辅助函数确实是必需的,因为PHP不是强类型的。本周早些时候我发布了一个similar question(尽管不是 类似的)关于isset。需要注意的一点是,在某些情况下(当存在混合类型时), PHP会将您的字符串更改为其整数值以进行比较。这不容忽视。我认为这是is_numeric
如果您将数字与字符串进行比较 或者比较涉及数字 字符串,然后转换每个字符串 一个数字和比较 以数字方式执行。这些规则 也适用于switch语句。 类型转换不需要 当比较为===或时 !==因为这涉及比较 类型和价值。
要考虑的另一件事是PHP中的“0是什么”。那意义重大。它并不总是数字。它可能是一个数字字符串,布尔值false,整数等...这就是存在这些辅助函数的原因。
添加到我的回答:
改变你的榜样:
$whatami='beast';
($whatami<5) ? echo 'less than 5' : echo 'more than 5';
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?');
}
然后你会得到你想要的结果(尽可能奇怪)。
答案 1 :(得分:2)
“可以评估某个变量是否为数字”与“评估某个变量是否为正数”之间存在很大差异。使用比较符号需要您对其进行两次测试(>
和<=
或>=
&amp; <
)并且可能不会立即显而易见。 is_numeric
意味着您只需要进行一次测试,并且非常清楚您正在做什么。
此外,字符串将评估为0,这意味着它会将您的想法抛出。坚持正确的命令:)
根据评论那么,在这种情况下,您要求将is_numeric
与正数测试进行比较,不包括0.这不是{{1}的意图,很自然地,它可能没有必要。如果您进行的数学检查涉及0作为答案或作为范围的一部分,则需要is_numeric
,否则您将不需要它。问题的第一部分提出了一个不同的问题,所以:
似乎简单的比较符号&gt;,&gt; =并且他们的反向组件可以评估某个变量是否为数字 - 不正确
是否存在正值(数字&gt; 0)需要使用is_numeric
的情况? - 否
似乎使用上面的比较符号将确定变量是否为数字 - 否。他们可以确定变量是非零数还是未知,而不是数字。
答案 2 :(得分:0)
比较将取决于运营商左侧的数据类型。
要记住的重要一点是PHP 不 是一种强类型语言。如果你想比较一个数字并确保它是一个数字,那么是的,is_numeric()
将是一个很好的检查。例如,
echo (is_numeric($whatami) && $whatami < 0) ? 'number greater than zero' : 'NaN or negative';
但是,这不应该概括。如果您可以更多地评论您想要做什么,您可以找到更详细的答案。
答案 3 :(得分:0)