位元詩人 [PHP] 程式設計教學:資料型態 (Data Type)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

資料型態定義電腦程式可處理的資料的形式。本文介紹 PHP 的資料型態。

PHP 的資料型態

PHP 的資料型態可分為以下數種:

  • 純量型態 (scalar type)
    • 布林 (boolean)
    • 整數 (integer)
    • 浮點數 (floating-point number)
    • 字串 (string)
  • 複合型態 (compound type)
    • 陣列 (array)
    • 物件 (object)
    • 回呼函式 (callable)
    • 迭代 (iterable)
  • 特殊型態
    • 資源 (resource)
    • NULL

PHP 的資料型態是在運行期決定的。PHP 會根據語境決定最適合的資料型態。

布林 (Boolean)

布林型態用來表達數學上的布林數。PHP 的布林數有 truefalse 兩個值。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):00o/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)。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。