3

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

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

4

4 回答 4

5

正如我所发现的,很多这些帮助函数是非常必要的,因为 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?');
}

然后你会得到你想要的结果(尽管它可能很奇怪)。

于 2010-07-23T04:07:16.600 回答
2

“可以评估某个变量是否为数字”和“评估某个变量是否为正数”之间存在很大差异。使用比较符号需要您测试两次(>&<=>=& <),并且可能不会立即显而易见。is_numeric意味着您只需要一次测试,就可以很清楚地知道您在做什么。

此外,一个字符串将评估为 0,这意味着它会抛出你的想法。坚持使用正确的命令:)

根据评论:好吧,在这种情况下,您要求与is_numeric正数测试进行比较,不包括 0。这不是 的意图is_numeric,因此自然可能没有必要。如果您进行涉及 0 作为答案或作为范围的一部分的数学检查,您将需要is_numeric,否则您将不需要它。您问题的第一部分提出了一个不同的问题,因此:

似乎简单的比较符号 >,>= 及其反向组件可以评估某个变量是否为数字-不正确

是否存在is_numeric()需要使用正值(数字> 0)的情况?-没有

似乎使用上面的比较符号可以确定变量是否为数字-否。他们可以确定变量是非零数字还是未知,而不是数字。

于 2010-07-23T03:59:24.690 回答
0

比较将取决于运算符左侧的数据类型。

要记住的重要一点是 PHP不是一种强类型语言。如果您想比较一个数字并确保它是一个数字,那么是的,is_numeric()这将是一个很好的检查。例如,

echo (is_numeric($whatami) && $whatami < 0) ? 'number greater than zero' : 'NaN or negative';

但是,这不应该一概而论。如果您可以对您想要做的事情发表更多评论,您可能会找到更详细的答案。

于 2010-07-23T03:59:57.947 回答
0

是的,有案例。

例如:

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 值进行操作。

于 2010-07-26T00:22:12.300 回答