函數定義與核心作用
void var_dump(mixed $var, mixed ...$vars)
- 輸出變量的類型、長度/大小、值
- 支持多參數一次性輸出
- 對數組/對象遞歸展開結構
- 引用標記
&、遞歸標記 *RECURSION* 可見
基礎輸出示例
$ta = 1;
$tb = 't';
var_dump($ta, $tb);
輸出結果
int(1)
string(1) "t"
int(1):整型,值 1
string(1) "t":字符串,長度 1,值 "t"
完整類型輸出格式速查
| 類型 | 輸出格式 | 示例 |
| 整數 | int(值) | int(42) |
| 浮點數 | float(值) | float(3.14) |
| 布爾 | bool(值) | bool(true) |
| 字符串 | string(長度) "值" | string(5) "hello" |
| 數組 | array(元素數) { ... } | array(2) { [0]=>int(1) [1]=>string(1) "a" } |
| 對象 | object(類名)#ID (屬性數) { ... } | object(stdClass)#1 (1) { ["prop"]=>string(3) "foo" } |
| NULL | NULL | NULL |
| 資源 | resource(類型) ID | resource(mysql link) ID#3 |
進階輸出示例
多維數組
$arr = [
'user' => ['name' => 'John', 'age' => 25],
'tags' => ['php', 'mysql']
];
var_dump($arr);
array(2) {
["user"]=>
array(2) {
["name"]=>
string(4) "John"
["age"]=>
int(25)
}
["tags"]=>
array(2) {
[0]=>
string(3) "php"
[1]=>
string(5) "mysql"
}
}
對象與可見性
class User {
public $name = 'John';
protected $email = 'john@example.com';
private $password = 'secret';
}
$user = new User();
var_dump($user);
object(User)#1 (3) {
["name"]=>
string(4) "John"
["email":protected]=>
string(16) "john@example.com"
["password":"User":private]=>
string(6) "secret"
}
引用與遞歸
$a = 'original';
$b = &$a;
var_dump($a, $b);
string(8) "original"
string(8) "original" // 同一內存地址
$arr = [1, 2];
$arr[] = &$arr; // 自引用
var_dump($arr);
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> &array(3) { *RECURSION* }
}
調試實戰技巧
1. 配合 die/exit 即時中斷
var_dump($variable); die;
2. 輸出美化(開發環境)
echo '';
var_dump($data);
echo '
';
3. 限制輸出深度(防止巨大對象爆屏)
// xdebug 可配置
// ini_set('xdebug.var_display_max_depth', 3);
4. 替代方案對比
| 函數 | 輸出特點 | 適用場景 |
| var_dump | 類型+長度+值,結構完整 | 深度調試、結構分析 |
| print_r | 僅值結構,可返回字符串 | 日誌記錄、API 響應檢查 |
| var_export | 合法 PHP 代碼格式,可 eval | 配置導出、緩存序列化 |
| json_encode | JSON 格式,前端友好 | API 調試、跨語言交互 |
常見問題 FAQ
- 變量不存在會報錯嗎? 會觸發 Notice "Undefined variable",輸出
NULL
- 能輸出資源細節嗎? 僅顯示資源類型和 ID,具體內容需對應函數(如
stream_get_meta_data())
- 性能影響? 大數組/對象遞歸輸出較慢,生產環境禁用