不确定为什么 PHP 7 和 8 之间的 intval 行为不同

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

我试图理解为什么 intval PHP 函数的行为在 PHP 7 和 8 之间有所不同。

例如,在像这样的测试脚本中

<?php 
echo "test on " . phpversion() . " \n";
$test_var = "home";
echo "test_var is: " . $test_var . " \n";
if ( $test_var == intval($test_var) ) {
    echo "same \n";
} else {
    echo "not same \n";
}
echo "intval of test_var is: " . intval($test_var) . " \n";

...我认为它应该总是“不相同”,但它不在 PHP 7 中。

所以在 PHP 7 中,脚本输出...

test on 7.4.33 
test_var is: home 
same 
intval of test_var is: 0 

在 PHP 8 中,脚本输出...

test on 8.1.2-1ubuntu2.14 
test_var is: home 
not same 
intval of test_var is: 0 

谁能解释一下为什么 PHP7 会这样?

https://www.php.net/manual/en/function.intval.php的文档没有解释。

php
1个回答
0
投票

https://wiki.php.net/rfc/string_to_number_comparison页面上

您可以阅读以下行

0 == "foo" | true | false

此外:

使用 == 和其他非严格比较运算符在字符串和数字之间进行比较目前是通过将字符串转换为数字,然后对整数或浮点数进行比较来实现的。这会产生许多令人惊讶的比较结果,其中最值得注意的是 0 == "foobar" 返回 true

所以,简而言之,您的字符串被转换为数字以进行比较,并且由于它不是数字,因此它转换为 0,这与

intval($test_var)

 的结果完全相同
    

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