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

PHP 變數型別檢測完整指南:gettype、is_* 系列函數與實務除錯技巧

     編輯:PHP 相關知識

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_* 系列:布林判斷

實戰:驗證 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() 提供更精確的型別描述,除錯時強烈建議使用。

養成「先檢型別、再處理資料」習慣,能消除大量難以復現的運行時錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數判斷條件
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")