PHP強化之07 - 資料型別
----- 最後更新【2018-12-6】-----
簡介
在PHP程式中,一共支援9種原始資料型別。我們將它們劃分為三類:標量資料型別、複合資料型別和特殊資料型別。
一、標量資料型別
標量資料型別有4種,包括布林型、字串、整型、浮點型。
1、boolean
布林變數是PHP變數中最簡單的,它儲存一個True或者False值,其中True或者False是PHP的內部關鍵字。
定義一個布林型的變數,只需將True或者False賦值給該變數即可。
2、string
字串是連續的字元序列,字串中的每個字元只佔用一個位元組。
在PHP中,定義字串有4種方式:單引號,雙引號,Heredoc、Nowdoc。
3、integer
整數資料型別只能包含整數,這些資料型別可以是正數或負數。在32位的作業系統中,有效的範圍是-2 147 483 648~2147 483 647(也就是 -2^31 ~ 2^31 -1)。
整型值可以使用十進位制,十六進位制,八進位制或二進位制表示,前面可以加上可選的符號(- 或者 +)。
4、float
浮點型(也叫浮點數 float,雙精度數 double 或實數 real)。
浮點資料型別可以用來儲存數字,也可以儲存小數。它提供的精度比整數大得多。
二、複合資料型別
複合資料型別包括陣列、物件和可呼叫。
5、array
陣列可以是二維、三維或者多維,陣列中的各元素可以是string、integer或double,也可以是array。
6、object
要建立一個新的物件 object,使用 new 語句例項化一個類
7、callable
自 PHP 5.4 起可用 callable 型別指定回撥型別 callback,也就是說
callback可以等同於callable 。
三、特殊資料型別。
特殊資料型別包括資源和無型別。
8、resource
資源是一種特殊的變數,儲存在外部資源的一個應用,資源是通過函式來進行建立的。
9、null
特殊的 NULL 值表示一個變數沒有值。NULL 型別唯一可能的值就是 NULL,任何變數的初始值都是null。
如下情況一個變數會被認為是 NULL:被賦值為 NULL、尚未被賦值(或未定義的變數)、被 unset()。
四、偽型別
偽型別(pseudo-types) 是 PHP 文件裡用於指示引數可以使用的型別和值。 請注意,它們不是 PHP 語言裡原生型別。
1、mixed(混合型別)
mixed 說明一個引數可以接受多種不同的(但不一定是所有的)型別。
例如 gettype() 可以接受所有的 PHP 型別,str_replace() 可以接受字串和陣列。
2、number(數字型別)
number 說明一個引數可以是 integer 或者 float。
3、callback(回撥型別,又稱為 callable)
本文件中在 PHP 5.4 引入 callable 型別之前使用 了 callback 偽型別。二者含義完全相同。
4、array|object(陣列 | 物件型別)
array|object 意思是引數既可以是 array 也可以是 object。
5、void(無型別)
void 作為返回型別意味著函式的返回值是無用的。void 作為引數列表意味著函式不接受任何引數。
五、型別的判斷與轉換
1、判斷與轉換參考表
型別 | 強制轉換 | 轉換函式 | 型別判斷 |
---|---|---|---|
通用方法 | settype() | gettype() | |
整型 | (int), (integer) | intval() | is_integer() |
浮點型 | (float), (double), (real) | is_float() | |
布林型 | (bool), (boolean) | is_bool() | |
字串 | (string) | strval() | is_string() |
陣列 | (array) | array() | is_array() |
物件 | (object) | ||
資源 | is_resource() | ||
NULL | (unset) | unset() | is_null() |
二進位制字串 | (binary) | ||
數字或數字字串 | is_numeric() | ||
標量(integer/float/string/boolean) | is_scalar() |
2、獲取變數的型別
string gettype ( mixed $var ) //獲取變數的型別
注意:
1)不要使用 gettype() 來測試某種型別,因為其返回的字串在未來的版本中可能需要改變。此外,由於包含了字串的比較,它的執行也是較慢的。
2)當需要判斷的型別的時候,建議使用 is_* 函式代替。