首頁  >  文章  >  类库下载  >  PHP弱型別問題

PHP弱型別問題

高洛峰
高洛峰原創
2016-10-10 09:51:501106瀏覽

一、型別轉換問題

 intval();
 
    var_dump(intval('1asdfasd'));  //1
    var_dump(intval('awqw12'));  //0
    var_dump(intval(array()));    //0
    var_dump(intval(array('foo','val'))); //1
    var_dump(intval(0x1A)); //26  十六进制转换
    var_dump(intval('asdfqwer')); //0

intval 如果轉換值為字串時,不會傳回錯誤,而是傳回0,如果轉換值為陣列時,有兩種情況,轉換值為空數組時,則會傳回0,否則就會回傳1

    注意:php用32位元記憶體來保存一個整數,32位元可以表示4294967296個數字,有符號的話就是-2147483647到2147483648;

以上結果,會進入switch case 3 裡面,為什麼會這樣,如果switch是數字類型的case的判斷時,switch會將其中的參數轉換為int類,所以上述執行的時候,首先會把$i進行了類型轉換,轉換結果為3 ,所以。 。 。

switch();
 
     $i='3adcd';
     switch($i){
              case 1:
                     echo 'i is 1';
                     break;
              case 2:
                     echo 'i is 2';
                     break;
              case 3:
                     echo 'i is 3';
                     break;
              default:
                    echo 'i is default';
                    break;
     }

為什麼上面執行結果會是這樣的,後面透過查詢手冊,官方給出的說法是, in_array 預設是走鬆散比較方式,只比值是否相等,而不比較值的類型是否一樣,所以才有上面這種結果,不過可以設定in_array 函數第三個參數,設定為True就是嚴謹的比較方式。

 

 

以上都是我們平常開發需要注意的地方。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多