調試時輸出變量結構,var_dump、var_export、print_r 三大函數各有特色。理解輸出格式、返回值、適用場景差異,能大幅提升調試效率。
$a = [1, 1, 32, 322, 3433, [32, 232, 23232]];
$b = 1234;
$c = "alsdfl;asdf";
$d = 'a';
$e = fopen("not_exist.txt", "r"); // 返回 false
| 函數 | 輸出格式 | 類型信息 | 長度信息 | 返回值 | 可作為代碼 |
|---|---|---|---|---|---|
| var_dump | 結構化文本 | ✅ | ✅ (字符串/數組) | void | ❌ |
| var_export | 合法 PHP 代碼 | ✅ (隱含) | ❌ | bool/string | ✅ |
| print_r | 易讀文本 | ❌ | ❌ | bool/string | ❌ |
array(6) {
[0]=> int(1)
[1]=> int(1)
[2]=> int(32)
[3]=> int(322)
[4]=> int(3433)
[5]=> array(3) {
[0]=> int(32)
[1]=> int(232)
[2]=> int(23232)
}
}
int(1234)
string(11) "alsdfl;asdf"
string(1) "a"
bool(false)
array (
0 => 1,
1 => 1,
2 => 32,
3 => 322,
4 => 3433,
5 =>
array (
0 => 32,
1 => 232,
2 => 23232,
),
)
1234
'alsdfl;asdf'
'a'
false
Array
(
[0] => 1
[1] => 1
[2] => 32
[3] => 322
[4] => 3433
[5] => Array
(
[0] => 32
[1] => 232
[2] => 23232
)
)
1234
alsdfl;asdf
a
var_dump($a, $b, $c)<pre> 保留縮進格式include 或 evaltrue 返回字符串:$code = var_export($arr, true)NULL (無法序列化)true 返回字符串false 輸出空字符串,易混淆<?php
// 1. 統一格式化輸出
function debug($var, $label = '', $die = false) {
echo '<pre style="background:#f5f5f5;padding:10px;border:1px solid #ddd;">';
if ($label) echo "$label:\n";
var_dump($var);
echo '</pre>';
if ($die) die;
}
// 2. 只在開發環境輸出
if (($_SERVER['SERVER_NAME'] ?? '') === 'localhost') {
debug($user, '當前用戶');
}
// 3. 獲取 print_r/var_export 字符串用於日誌
$log = print_r($data, true);
error_log($log, 3, '/var/log/debug.log');
var_dump()var_export()print_r()