在尝试在 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 条件为 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";};