前言
資料型態定義電腦程式可處理的資料的形式。本文介紹 PHP 的資料型態。
PHP 的資料型態
PHP 的資料型態可分為以下數種:
- 純量型態 (scalar type)
- 布林 (boolean)
- 整數 (integer)
- 浮點數 (floating-point number)
- 字串 (string)
- 複合型態 (compound type)
- 陣列 (array)
- 物件 (object)
- 回呼函式 (callable)
- 迭代 (iterable)
- 特殊型態
- 資源 (resource)
NULL
PHP 的資料型態是在運行期決定的。PHP 會根據語境決定最適合的資料型態。
布林 (Boolean)
布林型態用來表達數學上的布林數。PHP 的布林數有 true
和 false
兩個值。PHP 的布林數不區分大小寫。
在 PHP 程式中,以下資料視為偽 (falsy):
false
本身- 整數
0
- 浮點數
0.0
和-0.0
- 空字串
""
和零字串"0"
- 空陣列
NULL
和未定義的變數- 空的 SimpleXML 物件
除上述偽值,其他值視為真 (truly)。包括 NAN
(非數字) 和任何資源。
整數 (Integer)
注意 PHP 程式的整數大小因系統而異。PHP_INT_SIZE
代表 PHP 在該系統的大小。PHP_INT_MAX
是極大值,PHP_INT_MIN
是極小值。
PHP 使用的進位系統:
- 十進位 (decimal)
- 十六進位 (hexadecimal):
0x
- 八進位 (octal):
0
或0o
/0O
(PHP 8.1+) - 二進位 (binary):
0b
可以使用底線將長數字隔開,像是 1000_0000_0000
。(PHP 7.4+)
浮點數 (Floating-Point Number)
視同 C 語言的 double
型態,其精確度因系統而異。可以使用底線將長數字隔開。(PHP 7.4+)
由於浮點數會有誤差,要比較兩浮點數時要比較其誤差值。像是以下工具函式用來比較兩浮點數是否相等:
function isEqualFloat($a, $b, $epsilon = 0.00001)
{
return abs($a - $b) < $epsilon;
}
字串 (String)
PHP 字串內部是字元陣列,沒有預設的編碼。可再細分為以下種類:
- 單行字串
- 單引號字串
- 雙引號字串
- 多行字串
- Nowdoc
- Heredoc
因篇幅限制,我們會在後文介紹 PHP 字串。
陣列 (Array)
PHP 的陣列實際上為有序映射 (ordered map),可用來模擬陣列 (array) 和字典 (dictionary) 兩種資料結構。
因篇幅限制,我們會在後文介紹 PHP 陣列。
物件 (Object)
PHP 從 PHP 3 開始支援物件。而現行的 PHP 物件導向語法則是從 PHP 5 開始加入的。
函式物件 (Callable)
PHP 的函式也是值,所以 PHP 支援一些函數式程式設計。像是 usort 函式的第二個參數就是函式物件。
迭代 (Iterable)
迭代 (PHP 7.1+) 不是真正的資料型態,而是實作 Traversable 介面的物件。物件實作該介面後,就可以用 foreach
迴圈來走訪。
資源 (Resource)
代表外部資源的特殊物件,原文稱為 handle。常見的資源有檔案 (file)、資料庫連線 (database connection)、繪圖區 (canvas) 等。
NULL
null
代表變數沒有值的狀態。以下值視為 null
:
- 未賦值的變數
- 變數以
null
賦值 - 使用 unset 去除的變數
檢查資料型態的函式
以下函式可檢查變數的資料型態:
型態宣告 (Type Declaration)
PHP 可在函式的參數或回傳值、類別的屬性 (properties) 中加上資料型態的標註 (annotation)。這些標註是選擇性的 (optional)。