首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 型別轉換機制詳解:自動轉換、強制轉換與 NULL 型別

     編輯:PHP 綜合知識

NULL 型別

  • 唯一值:null(大小寫不敏感)。
  • 判定為 NULL 的情況:賦值 null、未賦值、unset() 後。
  • (unset)$var 或 settype($var, 'null') 可將變數轉為 NULL(PHP 5+)。

自動型別轉換

PHP 為動態弱型別語言,變數型別由上下文決定:

<?php
$var = "10";   // String
$var = 10;     // Integer
$var = 10.5;   // Float

// 算術運算觸發轉換
echo "5" + "3";     // 8 (Integer) - 字串轉數字相加
echo "5" . "3";     // "53" (String) - 句點為串接
echo 5 + 3.2;       // 8.2 (Float) - 整數提升為浮點數
echo true + 1;      // 2 (Integer) - Boolean 轉整數

關鍵規則

  • 運算子決定運算型別:+ 任一操作數為 Float → 全部視為 Float,否則視為 Integer。
  • 邏輯運算子(&&, ||, !)回傳 Boolean。
  • 字串串接(.)強制轉 String。
  • 轉換不改變原變數型別,僅影響運算結果型別。

強制型別轉換

語法目標型別別名
(int) / (integer)Integer
(bool) / (boolean)Boolean
(float) / (double) / (real)Float
(string)String
(array)Array
(object)Object
(binary)Binary StringPHP 6 / 5.2.1+ 加 b 前綴
(unset)NULLPHP 5+

轉換範例

<?php
$val = "123abc";
echo (int)$val;    // 123 (截取前導數字)
echo (float)$val;  // 123.0
echo (bool)$val;   // true (非空字串)
echo (array)$val;  // ["123abc"] (單元素陣列)
echo (object)$val; // stdClass Object (["scalar"] => "123abc")

標量轉換細節

轉 Boolean

視為 false:false, 0, 0.0, "", "0", [], null, 空 SimpleXML 物件。其餘皆為 true。

轉 Integer

  • Boolean:false→0, true→1。
  • Float:向零截斷(3.9→3, -2.7→-2)。超出範圍結果未定義(無警告)。
  • String:前導數字部分,無數字則 0。

轉 Float

  • Integer/Boolean:直接對應。
  • String:前導數字(含科學記號 1.2e3),無數字則 0.0。

轉 String

  • Integer/Float:數字字面形式(Float 保留科學記號)。
  • Boolean:true→"1", false→""。
  • Array:"Array"(觸發 Notice),無法顯示內容,用 print_r/var_dump。
  • Object:PHP 4 "Object",PHP 5+ 呼叫 __toString(),無則錯誤。
  • Resource:"Resource id #1"。
  • NULL:""。

實用函數

函數用途
settype($var, $type)就地轉換變數型別
gettype($var)取得型別字串
intval($var) / floatval() / strval()轉換並回傳新值
is_int() / is_float() / is_string() / is_bool() / is_array() / is_object() / is_null() / is_numeric()型別檢查

最佳實踐

  1. 輸入驗證階段統一轉換(filter_var()、intval()),業務邏輯使用強型別。
  2. PHP 7.0+ 使用嚴格型別宣告:declare(strict_types=1) + 函數參數/回傳型別提示,編譯期捕獲型別錯誤。
  3. 避免依賴隱性轉換(如 if ($str) 判斷非空字串),改用 if ($str !== '') 明確語意。
  4. 浮點數比較永不使用 ==,用 abs($a-$b) < EPSILON 或 BCMath/GMP 高精度庫。
  5. 序列化儲存用 serialize()/unserialize() 或 JSON,跨語言首選 JSON。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved