PHP8.3 中带有 $bool = false 的 If(!$bool) 块的行为就像表达式的计算结果为 false

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

我遇到了一个奇怪的问题,关于如何在 Apache 2.4.58 的 PHP 模块中计算单个布尔变量表达式。经过多年没有实践,刚刚安装了 MacPorts 服务器+PHP(这不是我的工作,我将它们用于我编码或在其他地方找到的一些 Web 实用程序)。在对主代码进行一些试验后,我转向简化测试用例,如下所示,以便我可以从浏览器查看 HTTP 请求的结果:

<?php
echo "<p>";
$bool = false;
echo "1 if bool is true, nothing if it is false: " . $bool . "<br>"; 
echo "1 if !bool is true, nothing if it is true: " . !$bool . "<br>";
if (!$bool) {
    echo "bool is false<br>";
} else {
    echo "bool is true<br>";
}
if (!$bool == "1") {
    echo "bool is false<br>";
} else {
    echo "bool is true<br>";
}
echo "</p>";
exit();
?>

奇怪的是,至少对我来说,这就是页面上打印的内容:

1 if bool is true, nothing if it is false:
1 if !bool is true, nothing if it is true: 1
bool is true
bool is false

所以我期望第一个

if()
测试也应该返回该变量为 false。我尝试使用我机器上的旧 PHP5.5,这给了我预期的结果。那么,这里发生了什么?

php apache2.4 php-8
1个回答
0
投票

我似乎确实没有办法生成你的输出。 请参阅:https://3v4l.org/UJ3Rb

4.3.10 - 4.3.11、4.4.0 - 4.4.9、5.0.2 - 5.0.5、5.1.0 - 5.1.6、5.2.0 - 5.2.17、5.3.0 - 5.3.29 的输出、5.4.0 - 5.4.45、5.5.0 - 5.5.38、5.6.0 - 5.6.40、7.0.0 - 7.0.33、7.1.0 - 7.1.33、7.2.0 - 7.2.34、7.3 .0 - 7.3.33、7.4.0 - 7.4.33、8.0.0 - 8.0.30、8.1.0 - 8.1.27、8.2.0 - 8.2.15、8.3.0 - 8.3.2

<p>1 if bool is true, nothing if it is false: 
1 if !bool is true, nothing if it is true: 1
bool is false
bool is false
</p>

除了

Output for 4.3.0 - 4.3.9, 5.0.0 - 5.0.1
的一些小问题,因为它们似乎错过了我插入的
PHP_EOL
,所有版本都有一致的输出。

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