似乎简单的比较符号>,>=
及其反向组件可以评估某个变量是否为数字。例子$whatami='beast'; ($whatami<0)?echo 'NaN':echo 'is numeric!';
是否存在is_numeric()
需要使用正值(数字> 0)的情况?似乎使用上面的比较符号将确定变量是否为数字..
似乎简单的比较符号>,>=
及其反向组件可以评估某个变量是否为数字。例子$whatami='beast'; ($whatami<0)?echo 'NaN':echo 'is numeric!';
是否存在is_numeric()
需要使用正值(数字> 0)的情况?似乎使用上面的比较符号将确定变量是否为数字..
正如我所发现的,很多这些帮助函数是非常必要的,因为 PHP 不是强类型的。本周早些时候,我发布了一个关于 isset 的类似问题(虽然不是那么相似)。需要注意的一件事是,在某些情况下(当有混合类型时) , PHP 会将您的字符串更改为其整数值以进行比较。这是不容忽视的。我认为这是一个强有力的案例is_numeric
来自PHP 手册
如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。这些规则也适用于 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?');
}
然后你会得到你想要的结果(尽管它可能很奇怪)。
“可以评估某个变量是否为数字”和“评估某个变量是否为正数”之间存在很大差异。使用比较符号需要您测试两次(>
&<=
或>=
& <
),并且可能不会立即显而易见。is_numeric
意味着您只需要一次测试,就可以很清楚地知道您在做什么。
此外,一个字符串将评估为 0,这意味着它会抛出你的想法。坚持使用正确的命令:)
根据评论:好吧,在这种情况下,您要求与is_numeric
正数测试进行比较,不包括 0。这不是 的意图is_numeric
,因此自然可能没有必要。如果您进行涉及 0 作为答案或作为范围的一部分的数学检查,您将需要is_numeric
,否则您将不需要它。您问题的第一部分提出了一个不同的问题,因此:
似乎简单的比较符号 >,>= 及其反向组件可以评估某个变量是否为数字-不正确
是否存在is_numeric()
需要使用正值(数字> 0)的情况?-没有
似乎使用上面的比较符号可以确定变量是否为数字-否。他们可以确定变量是非零数字还是未知,而不是数字。
比较将取决于运算符左侧的数据类型。
要记住的重要一点是 PHP不是一种强类型语言。如果您想比较一个数字并确保它是一个数字,那么是的,is_numeric()
这将是一个很好的检查。例如,
echo (is_numeric($whatami) && $whatami < 0) ? 'number greater than zero' : 'NaN or negative';
但是,这不应该一概而论。如果您可以对您想要做的事情发表更多评论,您可能会找到更详细的答案。
是的,有案例。
例如:
var_dump("5aa" > 4); //bool(true)
var_dump("5aa" > 6); //bool(false)
如您所见,转换"5aa"
为int(5)
. 让我们看看is_numeric
给出了什么:
var_dump(is_numeric("5aa")); //bool(false)
所以,is_numeric
更严格。是否有必要取决于您的应用程序。
请注意,数字字符串和数字不完全相同的情况:
var_dump("255" & "2"); //string(1) "2"
var_dump(255 & 2); //int(2)
请参阅按位运算:
注意数据类型转换。如果左侧和右侧参数都是字符串,则按位运算符将对字符的 ASCII 值进行操作。