我想知道PHP如何在內部處理真/假比較。 我知道true被定義爲1,false被定義爲0. 當我做if("a"){ echo "true";}
時,它回聲「true」。 PHP如何將「a」識別爲1?PHP中的真假工作如何?
回答
這涵蓋了PHP文件中爲booleans和type comparison tables。
當轉換爲布爾型,下面的值被認爲是FALSE:
- 布爾
FALSE
本身 - 整數
0
(零) - 浮子
0.0
(零) - 空字符串,而字符串
'0'
- 一個數組與零個元素
- 零個成員變量的對象(PHP 4只)
- 特殊類型
NULL
(包括尚未設定的變量)
所有其它值都被認爲是TRUE從空標籤創建
零爲假,非零爲真。
在php中,您可以使用===
運算符更明確地進行測試。
if (0==false)
echo "works"; // will echo works
if (0===false)
echo "works"; // will not echo anything
PHP使用弱類型(它稱爲'類型雜耍'),這是一個壞主意(雖然這是另一次對話)。當您嘗試在一個需要布爾上下文使用一個變量,它會轉換無論您的變量爲布爾,根據這裏提供一些大多是任意性的規則: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
「壞主意」純粹是主觀的:一旦你知道這是如何工作的,在我看來,這絕對不是問題;-) ;;並且轉換規則對我來說大多對我來說似乎不太合邏輯;-) – 2010-03-04 20:36:05
不要讓我發佈一個關於弱點類型的想法有多糟糕的問題stackoverflow);)。考慮到PHP設法使基本的三段論失敗,因爲隱式類型轉換使得php的等式不是傳遞的: echo(「true」== true)。「\ n」; // true echo(true == 1)。「\ n」; // true echo(「true」== 1)。「\ n」; // false:P – sidereal 2010-03-04 21:12:24
是啊......這對新玩家來說是一個(可能)非常危險的詭計,但不一定是個壞主意。我不打算在這裏捍衛代碼的健壯性,但有時這是一個很好的捷徑。另外,如果你在大規模工作方面做得很多,你可能會在大多數情況下使用平等方法。 – spronkey 2010-03-04 22:04:06
想到運營商爲一元函數的:is_false(type value)
其中根據特定類型和值的確切實現返回true或false。考慮是否聲明通過語法糖隱含地調用這樣的函數。
其他可能性是該類型具有cast操作符,該操作符隱式地將類型轉換爲另一種類型,在這種情況下,字符串轉換爲布爾值。
PHP不公開這些細節,但C++允許運算符重載,這暴露了運算符實現的細節。
嚴格檢查最好的操作是
if($foo === true){}
這樣的話,你真的檢查是否是真的,而不是1或只是簡單地設置。
- 1. PHP真或假
- 2. PHP如果使用真/假
- 3. 布爾,真,真,真如何假?
- 4. PHP的真/假內容解析
- 5. 我該如何計算真正的,真的負數,假陽性和假陰性
- 6. 爪哇,假&&假工作
- 7. 真或假的PHP三元操作的結果
- 8. 如何添加真或假的功能
- 9. 的JFrame getContentPane.removeAll()之間只有一個工作.setVisible(假)和.setVisible(真)
- 10. 裏面如果條件,切換var爲真,假,真,假
- 11. FirstOrDefault()== null?假:真;
- 12. 真假合金
- 13. 真/假條件
- 14. 確定真/假
- 15. F#的異步真的如何工作?
- 16. Caffe的卷積真的如何工作?
- 17. 如何使用AJAX從PHP函數得到真或假?
- 18. 如何檢查參數是真是假?
- 19. 如何預測真/假事件
- 20. 如何從$(「」)。on()獲得真/假?
- 21. 如何檢查是myMail.Send是真/假
- 22. C#LINQ Orderby - 真/假如何影響orderby?
- 23. 如何計算所有真/假C++
- 24. 如何SessionChannel真正的工作
- 25. PHP file_exists不起作用。這似乎是逆轉真假
- 26. Python真或假遊戲原型不工作
- 27. 設置真/假以IF /或語句不工作
- 28. 都useTransform:假和縮放:在iscroll4真實,縮放不工作
- 29. 在MySQL工作臺真/假數據類型
- 30. 整潔的代碼轉換布爾[] - >「假,真,真,假」
說「true被定義爲1而false被定義爲0」是過於簡單化的。 – 2010-03-04 20:33:05
btw。猜這是什麼返回:「false」== true – 2016-11-04 20:59:20