基本介紹
布爾類型 boolean
的值只有兩個,常量 TRUE
或是 FALSE
,通常用于條件判斷。
在實際使用上,這兩個常量值不區分大小寫,但按照命名規范,建議常量全部使用大寫。
很多時候,我們用數值 1
代表 TRUE
,用數值 0
代表 FALSE
。
類型轉換
要將一個變量的類型轉換成 boolean
時,只需要使用settype($varname, 'bool')
函數即可。
也可以在變量前使用 (bool)
或 (boolean)
來強行獲得一個布爾型的返回。
但并沒有真的改變這個變量的類型,要改變類型,還是需要使用settype()
函數。
大多數情況下系統會根據代碼情況自動進行轉換,或將變量轉成boolean
,或將boolean
轉成0
或1
。
在轉成 boolean
值時,以下值會被認為是 FALSE
-
FALSE
本身 - 整數型
0
(零) - 浮點型
0.0
- 空字符串,以及字符串
'0'
- 空數組
- 特殊類型
null
(包括尚未賦值的變量) - 從空標記生成的
SimpleXML
對象
條件判斷
通常 字符串 都等于 TRUE
,只有一個例外,那就是當字符串是'0'
或 ''
的時候,結果為FALSE
。
// 條件成立
// 過程,當字符串跟布爾型對比時
// 先將字符串轉成數字,然后將數字轉成布爾
// 'false' 字符串 無法正確轉成 數字,所以等于 1,而 1 等于 true
'false' == true;
// 條件不成立,因為 '0' 等于 FALSE
'0' == true;
'' == true;
通常 數值型 都等于 TRUE
,只有一個例外,那就是當數值型的絕對值等于0
的時候,結果為FALSE
。
// 條件成立
123 == true;
// 條件不成立,因為 0 等于 FALSE
0 == true;
-0 == true;
0.0 == true;
參考例子
例子1:
$a = true;
$b = false;
$c = $b or $a;
// 請問$c 等于 true 還是 false
答案是:false
。
or
是邏輯運算符,只要其中一個表達式為true
,則返回該表達式
這個例子的關鍵點是 運算符的優先級 ,因為or
運算符在優先級中最低,而=
賦值運算符優先級比之略高,所以先計算左邊的表達式$c = $b
,因此$c
等于false
,但這整個$c = $b or $a
表達式如果用于條件判斷,其值是等于true
的。
例子2:
// 表達式一
0 == (bool)'zero';
// 表達式二
0 == 'zero';
// 表達式三
0 === 'all';
// 表達式四
(string)0 == 'all';
答案:
表達式一:因為大多數字符串轉換成布爾值都是TRUE
,所以該表達式結果等于FALSE
。
表達式二:當數字和字符串進行比較時,會將字符串先轉成數字,而zero
字符串無法正確的轉成數字,導致轉換結果為0
,所以最終結果是TRUE
。
注意
468 != '468.468'
,因為'468.468'
字符串將會被轉成浮點數,而不是轉成整數型。
表達式三:當遇到嚴格比較時,表達式不會進行類型轉換,所以結果為FALSE
。
表達式四:將數字0
轉成字符串后為'0'
,兩個字符串比較不會發生類型轉換,所以這兩個字符串不相等,結果為FALSE
。