PHP 變數型別檢測完整指南:gettype、is_* 系列函數與實務除錯技巧
PHP 是動態弱型別語言,變數型別會隨賦值自動轉換。除錯 API 回傳、處理使用者輸入時,確認型別至關重要。本文整理 gettype()、is_* 家族函數用法,並示範 curl_exec 回傳值型別驗證實戰。
gettype():取得型別字串
<?php
$v = "hello";
echo gettype($v); // string
$v = 123;
echo gettype($v); // integer
$v = [1,2];
echo gettype($v); // array
$v = null;
echo gettype($v); // NULL
$v = fopen('php://memory', 'r');
echo gettype($v); // resource
回傳值為 boolean, integer, double (float), string, array, object, resource, NULL, unknown type 之一。
is_* 系列:布林判斷
| 函數 | 判斷條件 |
is_bool() | 布林值 |
is_int() / is_integer() / is_long() | 整數 |
is_float() / is_double() / is_real() | 浮點數 |
is_string() | 字串 |
is_array() | 陣列 |
is_object() | 物件 |
is_resource() | 資源型別 |
is_null() | NULL |
is_scalar() | 純量(布林/整數/浮點/字串) |
is_callable() | 可呼叫(函數名、閉包、可調用物件) |
is_iterable() | 可迭代(陣列、實作 Traversable 的物件)PHP 7.1+ |
is_numeric() | 數字或數字字串(如 "123", "1.2e3") |
實戰:驗證 curl_exec 回傳值
<?php
$ch = curl_init('https://api.example.com/token');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
]);
$resp = curl_exec($ch);
$errno = curl_errno($ch);
curl_close($ch);
if ($errno) {
die("cURL Error ($errno): ".curl_error($ch));
}
// 1. 確認型別
var_dump(gettype($resp)); // string
var_dump(is_string($resp)); // bool(true)
// 2. JSON 解碼前檢查
if (!is_string($resp) || $resp === '') {
die("Unexpected response type or empty");
}
$data = json_decode($resp, true);
if (json_last_error() !== JSON_ERROR_NONE) {
die("JSON Decode Error: ".json_last_error_msg());
}
// 3. 繼續業務邏輯
echo "Token: ".$data['access_token'];
常見誤區
is_numeric("123abc") 回傳 false,但 is_numeric(" 123 ") 回傳 true(忽略空白)。
gettype() 回傳 "double" 而非 "float",歷史原因。
is_null($undefinedVar) 會觸發 Notice,建議先 isset() 或 array_key_exists()。
- 物件型別檢測優先用
instanceof 或 is_a(),而非 gettype()。
PHP 8 新增:get_debug_type()
<?php
class User {}
$u = new User();
echo gettype($u); // object
echo get_debug_type($u); // User (具體類別名)
echo get_debug_type([1,2]); // array
echo get_debug_type(123); // int
get_debug_type() 提供更精確的型別描述,除錯時強烈建議使用。
養成「先檢型別、再處理資料」習慣,能消除大量難以復現的運行時錯誤。
- 上一篇文章: CentOS 使用 Yum 將 PHP 5.3 升級至 5.4 或 5.5 完整指令集
- 下一篇文章: PHP 錯誤控制運算子 @ 詳細用法與最佳實踐建議
Copyright ©
程式碼之家 All Rights Reserved