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

PHP 資料型別轉換完整指南:三種強制轉換方式與實戰範例

     編輯:PHP 相關知識

前言

PHP 是弱型別語言,變數型別會自動轉換,但精確控制型別對資料處理、API 介接、資料庫操作至關重要。本文系統整理三種強制轉換方式與適用場景。

可轉換的目標型別

型別關鍵字別名說明
(int) / (integer)整數截斷小數部份
(float) / (double) / (real)浮點數保留小數
(string)字串標量轉字串
(bool) / (boolean)布林值依 PHP 假值規則
(array)陣列標量包成單元素陣列
(object)物件轉為 stdClass
(unset)銷毀變數變為 NULL

三種轉換方式詳細比較

方式一:型別轉換運算子(最常用、效能最佳)

<?php
$num = 3.14;
$intNum = (int)$num;      // 3
$floatNum = (float)$num;  // 3.14
$strNum = (string)$num;   // "3.14"
$boolNum = (bool)$num;    // true

// 陣列轉換
$arr = [1, 2, 3];
$obj = (object)$arr;      // stdClass 物件
?>

特點:語法簡潔、編譯期最佳化、不需函數呼叫開銷。

方式二:專用轉換函數(語意明確)

<?php
$str = "123.9abc";

$intVal = intval($str);    // 123 - 截取開頭數字
$floatVal = floatval($str); // 123.9
$strVal = strval($floatVal); // "123.9"

// 進階用法
intval("0xFF", 16);  // 255 - 支援進制轉換
?>

特點:intval() 支援第二參數指定進制(2/8/10/16),處理十六進位顏色值、權限位元運算非常方便。

方式三:通用 settype() 函數(就地修改、回傳布林)

<?php
$num = 12.8;
$result = settype($num, "int"); // $num 變為 12
var_dump($result); // bool(true)
var_dump($num);    // int(12)

// 型別字串不區分大小寫
settype($var, "integer");
settype($var, "bool");
settype($var, "array");
?>

特點:直接修改原變數(傳址),回傳成功與否,適合動態型別轉換邏輯。

實戰場景對照表

場景推薦方式程式碼範例
GET/POST 參數轉整數型別運算子$id = (int)$_GET['id'];
表單價格轉浮點數型別運算子$price = (float)$_POST['price'];
十六進位顏色轉十進位intval()$rgb = intval($hex, 16);
動態型別轉換工具函數settype()settype($val, $targetType);
布林旗標標準化型別運算子$flag = (bool)$input;

型別轉換陷阱與注意事項

字串轉數字規則

<?php
(int)"123abc"   // 123 - 從開頭解析至非數字
(int)"abc123"   // 0   - 開頭非數字
(float)"3.14"   // 3.14
(float)".5"     // 0.5
(int)true       // 1
(int)false      // 0
(int)null       // 0
?>

陣列/物件轉換行為

<?php
// 陣列轉物件
$arr = ['a' => 1, 'b' => 2];
$obj = (object)$arr;
echo $obj->a; // 1

// 物件轉陣列
$arr2 = (array)$obj; // ['a' => 1, 'b' => 2]

// 標量轉陣列
$arr3 = (array)"hello"; // [0 => "hello"]
?>

NULL 與空值轉換

<?php
(bool)""        // false
(bool)"0"       // false  ⚠️ 字串 "0" 為假值
(bool)"0.0"     // true   ⚠️ 字串 "0.0" 為真值
(bool)[]        // false
(bool)[1]       // true
?>

PHP 8.1+ 新功能:never 型別與更嚴格轉換

新版本加強型別系統,建議搭配 declare(strict_types=1) 使用嚴格模式,減少隱式轉換導致的 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved