摘要: 字符串與數字對比和函數返回值與數字對比
字符串與數字對比
原理:
php的對比運算時,是會將兩個變量都轉換為相同類型,不同變量的無法對比 當字符串和int類型對比時,將會把字符串轉化為int類型,相當於字符串在底層執行了一次intval()函數. 至於為什麼數字放前面就能intval,放後面就不行,是因為: 該字符串的開始部分決定了它的值,如果該字符串以合法的數值開始,則使用該數值,否則其值為0。 怪不得有些網站註冊時非要名字以字符串開頭….
注意:如果字符串在比較時帶有’e’,’E’時,會被解析為科學計數法,如var_dump('1e123' == '1');為false
案例1:
案例2:
延伸: 如果字符串和數字比較會出現類型轉換的問題,那麼一些php自帶函數會不會出現相同的問題?
雖然也會出現問題,但是一直都有解決的方案,in_array()存在第三個參數,決定是否嚴格檢查, 默認為false , 相當與 “==” , 傳入true ,相當於”===” 還有很多這樣的函數,如array_search(),這裡不一一介紹了
函數返回值與數字對比
這段代碼便可以使用傳入數組來繞過 因為用strcmp()對比數組和字符串時返回值為null, 但是 null == 0為true ,所以繼續執行
md5() 函數傳入數組會返回null; 但是小編看了下網上的例子, 真的認為完全不合邏輯,就暫時一筆帶過
總結 一定要做好參數的過濾,在使用他之前 應該常用 “===” 來判斷,而不是”==” 應該瞭解每一個常用函數的參數和返回值,儘量採用嚴格模式
閱讀更多 id1188 的文章