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

PHP布尔值:为什么'true==';假';`这是真的吗?,php,Php,下面是一个示例代码来显示我的问题,当我做我的工作时,我特别注意这个, 但我找不到有关这方面的文章,所以哪一篇可以帮助我解决这个问题?让我们看看下面的PHP代码 <?php $sFalse = 'false'; if ($sFalse) { echo '1. true <br/>';} else { echo '1. false <br/>'; } if (true == $sFalse) { echo '

下面是一个示例代码来显示我的问题,当我做我的工作时,我特别注意这个, 但我找不到有关这方面的文章,所以哪一篇可以帮助我解决这个问题?让我们看看下面的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/>';
   }
 ?>

我不明白为什么两者都打印为true?

因为
'false'
不是一个假值,而是一个包含某些内容的字符串

因此,当进行比较时,
'false'
等于
true

如果出现以下情况,则该值为false:

  • 它是false:
    $val=false
  • 它是一个空字符串:
    $val=”“
  • 它是零:
    $val=0
  • 它为空:
    $val=null

请参阅。

这是因为严格和非严格之间的区别

请查看Booleans的PHP文档,以获得一些好的示例和解释:

//这是一个字符串,因此在If条件下为true
$sTrue='false';
如果($sTrue){
回显“1.true
;” 否则{ 回声“1.假
”; } //这里你用布尔值检查字符串,所以它总是真的 如果(真==$sTrue){ 回显“2.true
;” 否则{ 回声“2.假
”; }
您应该使用
==
进行严格的类型检查


true===$sTrue
-它是false

正如您所知,空字符串
'
可以强制转换为布尔类型
false
。但是'false'不是空字符串,因此php不能将'false'转换为布尔值false。另一方面,表达式
'false'=''
在php中为false。

您有2个if条件,因此需要单独考虑它们。这是一个基本点,因为每一个都是自己独特的操作,不会直接影响到另一个

首先,我们创建一个字符串
“false”
这是一个字符串,不是布尔值

$sFalse = 'false';
然后我们问(如果是我们想回答的问题)是$sFalse true,它是一个包含内容的字符串,PHP认为是true,因此它触发
echo'1。正确的

if ($sFalse) {
   echo '1. true <br/>';
}else {
   echo '1. false <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
则会触发其他两种情况(无论是
=
还是
===

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

if ($sFalse) {
   echo '1. true <br/>';
}else {
   echo '1. false <br/>';
}
if (true == $sFalse) {
   echo '2. true <br/>';
}else{
   echo '2. false <br/>';
}