1 回答

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
“===”和“!==”比較運(yùn)算符斷言兩件事:
值相等,并且
這些值屬于同一類型
對(duì)您的問題“將 !== 與 strcmp 函數(shù)一起使用有什么意義”的簡短回答只是“這是一種很好的做法”。這確實(shí)是具體關(guān)于 strcmp 的唯一原因,并且 != 在涉及該功能時(shí)會(huì)給您完全相同的結(jié)果。
長答案如下:
PHP 傳統(tǒng)上是一種松散類型的語言。也就是說,數(shù)據(jù)類型并不是那么重要,PHP 會(huì)自動(dòng)為您隱式轉(zhuǎn)換類型。默認(rèn)情況下它仍然這樣做(盡管近年來已經(jīng)添加了很多東西來改善這種情況)。例如,如果將字符串“1”添加到整數(shù) 1,PHP 會(huì)自動(dòng)將字符串轉(zhuǎn)換為整數(shù)并返回整數(shù)值 2。如果您嘗試這樣做,強(qiáng)類型語言將返回錯(cuò)誤。另一個(gè)例子是 PHP 會(huì)將 0 轉(zhuǎn)換為布爾值 false,并將任何其他非零值轉(zhuǎn)換為布爾值 true。
正是第二個(gè)示例導(dǎo)致某些 PHP 內(nèi)置函數(shù)出現(xiàn)問題。例如,strpos() 函數(shù)。如果您查看strpos 的文檔頁面,您會(huì)在“返回值”部分看到一個(gè)很大的“警告”,指出“此函數(shù)可能返回布爾值 FALSE,但也可能返回一個(gè)計(jì)算結(jié)果為 FALSE 的非布爾值”。出于這個(gè)原因,它建議您使用“===”運(yùn)算符來確保您獲得了您期望的準(zhǔn)確值和類型。所以“=== 0”表示在輸入的開頭找到了字符串,“=== false”表示沒有找到字符串。如果你只是使用“== false”你就不會(huì)
因此,開發(fā)人員養(yǎng)成了使用“===”和“!==”來測(cè)試相等性和類型的習(xí)慣。這是一個(gè)好習(xí)慣。
由于 strcmp 總是返回一個(gè)整數(shù),并且您總是將它與一個(gè)整數(shù)進(jìn)行比較,因此沒有隱式轉(zhuǎn)換,因此不需要比較類型和相等性。
- 1 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報(bào)