php的型別比較

2021-08-25 17:13:05 字數 1435 閱讀 9385

感覺好久沒寫**了,基礎知識忘了差不多了,所以最近準備擼一遍php的官方文件,看到基礎型別之間的比較的時候,它們之前進行的隱式自動轉換,看得我很是迷茫,感覺以前就沒怎麼細看,今天寫出來做個參考。

<?php 

var_dump(0 == 'all'); // true

var_dump(true == 'all'); // true

var_dump(0 == true); // ?結果是什麼鬼

?>

剛開始我有三大疑問

整型0為什麼和字串all相等

布林型true為什麼和字串all相等

上面兩個表示式的結果都是true了,為什麼整型0和布林型true不相等。

先不說為什麼是這個結果,先說說==比較運算子,官方給出的解釋為:

$a == $b 等於 true,如果型別轉換後 $a 等於 $b。

上面隱含的意思是,等號兩邊對比之前可能會進行型別轉換,這也是==和===的區別,==判斷的是**換後)值是否相等,===判斷值和型別是否全相等。

(1)、0 == 『all』 //true

官網解釋:

如果比較乙個數字和字串或者比較涉及到數字內容的字串,則字串會被轉換為數值並且比較按照數值來進行。

於是乎也就不難理解了,0是整型數字,』all』是字串,兩者比較之前,字串』all』轉化為整型,也就是0,所以相等為true

(2)、true == 『all』 //true

其實這些型別比較看多了,容易看懵逼,之前我看完上乙個之後再看這個就是那樣,上乙個例子裡面』all』隱式轉換為了0,如果應用到這個裡面, true == 0 結果怎麼可能是真。

官方解釋:還是上乙個位址

當乙個運算數是布林型,乙個是其它型別時,其他型別會轉換為bool布林型後再做比較,所以,既然字串』all』非空字串,非0字串,自然』all』轉換成布林型為true, true == true 結果自然為真。

(3)、0 == true //false

其實這個就沒必要來看了,上面已經做了解釋了,只是當時上面的兩個例子給搞懵逼了,也不知道這個該如何判斷了,且不可認為,因為』all』和0相等,』all』和true相等,那麼0 == true就相等了。就像是那句話,因為我(男)喜歡乙個她(女),她喜歡他,那麼我(男)喜歡他(男),不存在的。。。

好吧,這裡既然等號右邊為布林型,那麼整型0應該先轉換為布林型(false),然後與true做對比,結果為false。

其實坑還有很多,等以後收集好了再發出來。

上面這些純屬個人理解,歡迎指正。

php 弱型別比較

php中 是弱等於,不會比較變數型別 是強等於,會先比較變數型別。0e 開頭跟數字的字串 例如 0e123 會當作科學計數法去比較,所以和0相等 0x 開頭跟數字的字串 例如 0x1e240 會被當作16進製制數去比較 布林值true和任意字串都弱相等。當比較的一方是字串時,會先把其轉換為數字,不能...

PHP弱型別比較

ctf中弱型別比較 php弱型別比較 php中其中兩種比較符號 先將字串型別轉化成相同,再比較 先判斷兩種字串的型別是否相等,再比較 字串和數字比較使用 時,字串會先轉換為數字型別再比較 var dump a 0 true,此時a字串型別轉化成數字,因為a字串開頭中沒有找到數字,所以轉換為0 var...

php弱型別比較

題目 1.開啟頁面,進行 審計,發現同時滿足 a 0 和 a 時,顯示flag1。2.php中的弱型別比較會使 abc 0為真,所以輸入a abc時,可得到flag1,如圖所示。abc可換成任意字元 3.is numeric 函式會判斷如果是數字和數字字串則返回 true,否則返回 false,且p...