簡體   English   中英

PHP 布爾值:為什么`true == 'false'` 是真的?

[英]PHP boolean: why `true == 'false'` is true?

這是一個顯示我的問題的示例代碼,當我做我的工作時,我特別關注這一點,但我找不到關於此的一些文章,那么哪一個可以幫助我解決問題? 讓我們看看下面的 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 

我不明白為什么兩者都打印為 true?

因為'false'不是假值,它是一個包含某些內容的字符串。

因此,進行比較時, 'false'等於true

如果滿足以下條件,則值為 false:

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

請參閱比較文檔

那是因為嚴格和非嚴格之間的區別。

查看 Booleans 的 PHP 文檔以獲得一些很好的示例和解釋:

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

    //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 - 這是假的

如您所知,空字符串''可以轉換為布爾類型false 但是 'false ' 不是空字符串,因此 php 不能將 'false' 轉換為布爾值 false。 另一方面,表達式'false' == ''在 php 中是假的。

您有 2 個 if 條件,因此需要單獨考慮它們。 這是至關重要的一點,因為每個都是自己獨特的操作,不會直接影響另一個。

首先我們創建一個字符串"false"這是一個字符串而不是布爾值。

$sFalse = 'false';

然后我們問(如果是我們想要回答的問題)$sFalse 是否為真,並且它是一個包含內容的字符串,PHP 認為它為真,因此它會觸發echo '1. true <br/>'; echo '1. true <br/>';

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

接下來我們再次詢問$sFalse是否為真,再次是(大驚喜)所以它再次觸發echo '2. true <br/>'; 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; 那么其他兩個條件都會觸發(在任何一種情況下=====

您的問題不清楚預期的輸出應該是什么,所以我無法解釋更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM