在php中的符號等於'=='和全等於'==='的區別
從表面上看它們都是判斷等號左右兩把是否相等的功能,只是一個是兩個等號,一個是三個等號。
我們都應該知道,php是一種弱類型的語句,他的變量、字符定義其實並不十分規范,比如 $a = '4′;我們可以說這個$a是一個字符,但是他又可以直接進行數字的加減乘除;而且我們還知道一句話,叫做,非零即真,那麼這句好就是對於==這個符號來說的。比如我們說:
代碼如下 復制代碼if(4!=false){echo 'ok'},
這個判斷是成立的,他會輸出ok;因為4不是零,那麼就是真,真就不等於false,所以判斷成立,就會輸出ok,其實這裡4在判斷比較的時候,因為其對比對象的原因,所以這個4被轉化為了布爾值ture,所以判斷成立。當然如果這裡用===也是成立的,比如你寫
代碼如下 復制代碼 if(4!==false){echo 'ok'}他也會輸出ok,因為4本來就不是false,他們不是同一個字符。但是兩者有個很重要的區別,就是,==或!=是會因為比對的對象而轉化字符類型的,而===或!==是強制他不進行轉化而原樣進行對比,比如下面一個例子:
代碼如下 復制代碼if(0!=false){echo 'ok'}
,這個就不會輸出ok,因為0就是false,判斷不成立,但是如果你寫
代碼如下 復制代碼if(0!==false){echo 'ok'},
這個判斷就成立,會輸出ok,因為0如果不轉化,那他就不是false,0就是0;
甚至,
if('4′!=4){echo 'ok'}
,這個就不會輸出ok,因為他轉化後相等,判斷不成立,但是如果是
代碼如下 復制代碼if('4′!==4){echo 'ok'};
這個就會輸出ok,判斷成立,因為在恆等面前,有單引號的4和沒有單引號的4並不是同一個4,一個是數字,一個是個字符。所以這樣看來他們的對比就很簡單了。他們有什麼實際應用呢,就是一些比較特殊的時候會用到。比如下面:
代碼如下 復制代碼if(strpos('abc','a')!=false){echo 'ok'};
一段代碼來看:
<?php
$a = 0;
$b = false;
if($a == $b){
echo "等於";
}
if($a != $b){
echo "不等於";
}
?>
我們知道數值0也是代表假的。所以這個結果會輸出"等於"。如果我們把程序改下,用全等於的呢
代碼如下 復制代碼<?php
$a = 0;
$b = false;
if($a === $b){ //改成全等於
echo "等於";
}
if($a !== $b){
echo "不等於";
}
?>
這時候我們突然發現他會輸出"不等於"。這是為什麼呢。
因為:等號只判斷它們左右兩邊的最終結果值,而不判斷數據類型。
而全等於首先判斷等號兩邊的數據類型是否一致。接著還要判斷兩邊的最終結果值是否一致。如果都一致才會返回true呢。所以在例子中換成全等於他會判斷兩邊的數據類型,$a 是數值型。而$b是布爾型。所以他會返回假值。
==' 和 '!=='也是同樣的原理