PHP弱型別問題

高洛峰
發布: 2016-10-10 09:51:50
原創
1106 人瀏覽過

一、型別轉換問題

 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就是嚴謹的比較方式。

 

 

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!