三大函式核心差異
| 特性 | echo | print_r() | var_dump() |
| 類型 | 語言結構 (非函式) | 函式 | 函式 |
| 回傳值 | 無 | 成功返回 true | 無 |
| 參數數量 | 可多參數 (逗號分隔) | 單一參數 | 可多參數 |
| 輸出格式 | 原始值 | 易讀結構 (陣列/物件) | 詳細結構+型別+長度 |
| 適用資料型別 | 字串、數值 | 所有型別 (資源顯示 Resource id) | 所有型別 (含型別資訊) |
| 主要用途 | 一般輸出、模板輸出 | 除錯陣列/物件結構 | 深度除錯、型別檢查 |
實際輸出比較
$arr = ['name' => 'John', 'age' => 25, 'tags' => ['php', 'mysql']];
$obj = (object)['id' => 1, 'status' => true];
// echo
echo $arr;
// Notice: Array to string conversion → "Array"
// print_r
print_r($arr);
/* 輸出:
Array
(
[name] => John
[age] => 25
[tags] => Array
(
[0] => php
[1] => mysql
)
)
*/
// var_dump
var_dump($arr);
/* 輸出:
array(3) {
["name"]=>
string(4) "John"
["age"]=>
int(25)
["tags"]=>
array(2) {
[0]=>
string(3) "php"
[1]=>
string(5) "mysql"
}
}
*/
進階用法
print_r 返回字串而非輸出
$output = print_r($arr, true); // 第 2 參數 true = 返回字串
file_put_contents('debug.log', $output);
var_dump 多變數一次輸出
var_dump($arr, $obj, $GLOBALS['config']);
// 依序輸出所有變數詳細資訊
var_export 可執行的程式碼表示
$code = var_export($arr, true);
// 返回: array ( 'name' => 'John', 'age' => 25, ... )
// 可直接存為 PHP 檔案 require 使用
除錯最佳實務
// 開發環境專用除錯函式
function dd(...$vars) {
echo '<pre>';
foreach ($vars as $var) {
var_dump($var);
}
echo '</pre>';
die;
}
// 使用
dd($user, $request->all(), $config);
效能考量
echo 最快,無函式呼叫開銷
print_r、var_dump 較慢,**嚴禁留在生產環境程式碼中**
- 大量資料除錯時,考慮只輸出關鍵欄位或使用
debug_zval_dump 參考計數
常見誤區
echo($a, $b) 加上括號會語法錯誤,正確是 echo $a, $b
print_r 輸出布林值 false 顯示空字串,null 也顯示空字串,易混淆
var_dump 會輸出到標準輸出,API 回應中使用會破壞 JSON 格式