[英]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 文檔以獲得一些很好的示例和解釋:
//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.