这是一个展示我问题的示例代码,当我完成工作时,我特别注意这一点, 但是我找不到一些关于此的文章,哪一个可以帮我解决问题呢?让我们看看下面的PHP代码。
<?php
$sFalse = 'false';
if ($sFalse) {
echo '1. true <br/>';}
else {
echo '1. false <br/>';
}
if (true == $sFalse) {
echo '2. true <br/>';}
else {
echo '2. false <br/>';
}
?>
此打印输出
1. true
2. true
我无法理解为什么两个都是真的?
答案 0 :(得分:2)
因为'false'
不是假值,所以它是包含某些内容的字符串。
如果符合以下条件,则值为false:
$val = false;
$val = "";
$val = 0;
$val = null;
答案 1 :(得分:0)
答案 2 :(得分:0)
//This is a String so its true in If condition
$sTrue = 'false';
if ($sTrue) {
echo '1. true <br/>';}
else {
echo '1. false <br/>';
}
//And here you checking string with boolean so its always true
if (true == $sTrue) {
echo '2. true <br/>';}
else {
echo '2. false <br/>';
}
您应该使用===
进行严格类型检查
true === $sTrue
- 这是假的
答案 3 :(得分:0)
如您所知,空字符串''
可以转换为布尔类型false
。但是&#39; false&#39;不是一个空字符串,所以PHP无法投出虚假的&#39;变成布尔值false。另一方面,php中的表达式'false' == ''
为false。
答案 4 :(得分:0)
如果条件有2个,则需要单独考虑。这是一个基本点,因为每个都是它自己独特的操作,不会直接影响另一个。
首先我们创建一个字符串"false"
这是一个字符串,而不是一个布尔值。
$sFalse = 'false';
然后我们问(如果我们想要回答的问题)是$ sFalse为true,它是一个包含内容的字符串,PHP认为是真的,因此触发echo '1. true <br/>';
if ($sFalse) {
echo '1. true <br/>';
}else {
echo '1. false <br/>';
}
接下来我们再次询问$sFalse
是否属实,并且是(大惊喜吧)
所以它再次触发echo '2. true <br/>';
if (true == $sFalse) {
echo '2. true <br/>';
}else{
echo '2. false <br/>';
}
现在这个if($sFalse)
和if(true == $sFalse)
在PHP中是等价的,所以基本上你问的是同样的问题2x。
所以现在我们知道我们正在提出同样的问题,在两个独立且不同的操作中,它们是否相同并不奇怪?如果我给你一个红球,我问球是红色的,如果我再问一遍,你会说“是”,球是红色的,你认为答案是什么?
现在,如果您曾向if(true === $sFalse)
提出三个=
严格类型检查,那么基本上该类型必须匹配。然后它会触发else,因为'false'
是true
,但它不是布尔值true。
如果您将变量设置为false boolean $sFalse = false;
,则会触发其他条件(无论是==
还是===
)
在您的问题中不清楚预期的输出应该是什么,所以我无法解释更多。