PHP布尔值:为什么`true ==' false'`是真的吗?

时间:2018-02-09 07:30:12

标签: php

这是一个展示我问题的示例代码,当我完成工作时,我特别注意这一点, 但是我找不到一些关于此的文章,哪一个可以帮我解决问题呢?让我们看看下面的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 

我无法理解为什么两个都是真的?

5 个答案:

答案 0 :(得分:2)

因为'false'不是假值,所以它是包含某些内容的字符串。

如果符合以下条件,则值为false:

  • 这是假的:$val = false;
  • 这是一个空字符串:$val = "";
  • 它为零:$val = 0;
  • 它为null:$val = null;

请参阅comparisons documentation

答案 1 :(得分:0)

这是因为严格和非严格的区别。

看看Booleans的PHP文档,了解一些很好的例子和解释:

http://php.net/manual/en/language.types.boolean.php

答案 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;,则会触发其他条件(无论是==还是===

在您的问题中不清楚预期的输出应该是什么,所以我无法解释更多。