數據類型在php并不像java中那詳細那么多種類型,下面我來給各位同學介紹php 數據類型的一些基礎知道,各位同學可參考.
PHP 數據類型
PHP 支持八種原始類型(type).
四種標量類型:
1.string(字符串)
2.integer(整型)
3.float(浮點型,也作 double )
4.boolean(布爾型)
兩種復合類型:
1.array(數組)
2.object(對象)
兩種特殊類型:
1.resource(資源)
2.NULL(空)
查看變量類型
通過 gettype() 函數可以方便的查看某個變量的類型:
判斷變量類型
如果想通過判斷變量類型來可以使用 is_type 函數:
以上基本就是PHP數據類型的基本內容,大家如果想了解具體每個數據類型的用法,可以查閱PHP手冊,里面有詳細的說明.
數據類型轉換
PHP數據類型有三種轉換方式:
•在要轉換的變量之前加上用括號括起來的目標類型
•使用3個具體類型的轉換函數,intval()、floatval()、strval()
•使用通用類型轉換函數settype(mixed var,string type)
第一種轉換方式: (int) (bool) (float) (string) (array) (object)
第二種轉換方式: intval() floatval() strval()
第三種轉換方式: settype();
PHP數據類型隱性轉換的陷阱,我這里說的是php5+上跑的,php4的請飄過.先把錯誤報告打開,以防看不到錯誤信息
根據php manual 中 http://www.php.net/manual/zh/language.operators.comparison.php
“Comparison Operators” 一章的說明可知,number 和string進行比較的時候,會先將string類型首先轉化為number,然后再進行比較操作.
1.類型自動轉換為數組
當我們把一個非數組的變量當做數組來調用的時候,該變量在調用時數據類型臨時自動轉換成數組.
實例代碼如下:
如下例子可以明顯的看出下標類型自動轉換在發生.
這里字符串在 var_dump($str['aaa']) 被臨時轉換成了數組 array('s','t','r','i', 'n','g'),而用關聯數組方式
$str['aaa']讀取索引數組的值,關聯數組的下標'aaa'將被轉換成整形下標,因而在這里的$str['aaa']全等于$str[0].其他數據類型隱性轉換成數組也隱藏有陷阱,一般都不是報出undefined index錯誤.
舉例如下代碼:
解決辦法:
函數參數數據類型是數組的時候,防止用戶輸入字符串導致錯誤,如下例子,當添加用戶的時候,我們要求用戶必須輸入用戶名.沒有哪個SB把要求是數組的參數傳入字符串,但是防人之心不可無,說不定我連續工作超過十幾個小時后一不小心就成那個SB了,又或許某人想繞過代碼執行操作.
2.純數字字符串比較時自動轉換成整形超過范圍時發生溢出
3、整形和字符串比較時數據類型隱性轉換有可能發生問題
很遺憾這里輸出的是 true,我們知道 $number === $string 肯定是false,手冊上說 === 是比較值&&數據類型,而用 == 只是比較值,$number == $string 這里不是比較值嗎? '0' 和 'text' 明顯不一樣啊.小心了,這里的$string是先被秘密轉成和$number一樣的整形再比較的,$number == (int)$string的確是true
4. in_array 小陷阱
因為in_array會將0 和's' 進行比較,0是number類型,'s'是string類型, 's'轉化為number的結果為0,而0 == 0 的結果是true,所以in_array(0, array('s', 'ss'))的結果也是true.如果把in_array 的第三個參數strict設置為 true,比較的時候 就會判斷值和類型是否都相當.如果都相當的話,才會返回true,否則返回false.