php elseif 会触发,即使它不应该

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

在尝试在 php 中获取数据库相关函数的结果时,我发现我的 if/elseif 语句之一显示出奇怪的行为。

$var = 0;

if($var)
    {echo "if triggered";}
elseif($var == "test")  
    {echo "elseif triggered";}
else
    {echo "else triggered";};

// "elseif triggered" is echoed

elseif 部分被触发为 true,尽管它不应该被触发。现在我知道我可以通过使用“===”而不是仅“==”来解决这个问题。我只是想了解其背后的逻辑,以避免将来犯错误。它与 php 中的类型转换有关吗?或者这种行为从何而来?

最诚挚的问候,洛克斯。

php if-statement
1个回答
0
投票

在 PHP 中,如果前面的 if 条件为 false 并且其自身的条件为 true,则对

elseif
语句进行求值。在您的代码中,不满足条件
$var == "test"
,因为 $var 为 0,不等于字符串“test”。然而,
elseif
块仍然被执行,因为条件
$var (equivalent to $var != 0)
被评估为假,因此控制落入
elseif
块。

如果你想专门检查 $var 是否等于“test”,你应该像这样修改你的条件:

$var = 0;

if($var)
    {echo "if triggered";}
elseif($var === "test")  // Use strict comparison (===) to check for both value and type
    {echo "elseif triggered";}
else
    {echo "else triggered";};
© www.soinside.com 2019 - 2024. All rights reserved.