核心差異速查表
| 函數/語句 | 類型 | 返回值 | 參數數量 | 輸出能力 | 典型用途 |
| echo | 語言結構 | 無 | 多個 (逗號分隔) | 字符串/數字 | 模板輸出、性能敏感 |
| print | 函數 | int(1) | 單個 | 字符串/數字 | 表達式上下文、簡單輸出 |
| printf | 函數 | int(輸出長度) | 格式化字符串+參數 | 格式化字符串 | 格式化輸出、C 風格 |
| print_r | 函數 | bool/字符串 | 混合類型+可選返回 | 標量/數組/對象 | 調試輸出、結構查看 |
| var_dump | 函數 | 無 | 多個 | 任意類型(含類型/長度) | 深度調試、類型檢查 |
| var_export | 函數 | bool/字符串 | 混合類型+可選返回 | 合法 PHP 代碼表示 | 導出代碼、緩存生成 |
詳細用法示例
echo:高性能多參數輸出
echo "Hello", " ", "World", "\n"; // 多參數,無括號
// 語法錯誤:echo("Hello", "World"); // 語言結構不接受括號包裹多參數
$str = "test";
// 正確:echo $str;
// 錯誤:echo ($str); // 加括號變單參數表達式,但 echo 不返回值不能用於賦值
print:可用於表達式
$result = print "Hello\n"; // $result = 1
if (!print("發送失敗")) { die(); } // 利用返回值判斷
// 返回值恆為 1,不可用於獲取輸出內容
printf:格式化輸出
$name = "張三"; $age = 25; $score = 98.5;
printf("姓名: %s, 年齡: %d, 得分: %.1f\n", $name, $age, $score);
// 輸出: 姓名: 張三, 年齡: 25, 得分: 98.5
// 參數交換/復用 (PHP 4.0.6+)
$num = 123;
printf("小數: %1\$.2f, 整數: %1\$d\n", $num);
// 輸出: 小數: 123.00, 整數: 123
print_r:結構化調試輸出
$arr = ['name'=>'Fred', 'age'=>15, 'wife'=>'Wilma'];
print_r($arr);
/* 輸出:
Array
(
[name] => Fred
[age] => 15
[wife] => Wilma
)
*/
// 返回字符串而非直接輸出 (第二參數 true)
$output = print_r($arr, true);
file_put_contents('debug.log', $output);
// 注意:print_r 會將數組指針移到末尾
reset($arr); // 後續遍歷前需重置
var_dump:深度調試首選
$bool = false; $null = null; $arr = [1,2];
var_dump($bool, $null, $arr);
/* 輸出:
bool(false)
NULL
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
*/
// 顯示類型、長度、值,解決 print_r 無法區分 false/null/0/'' 的問題
var_export:可執行代碼導出
$data = ['config'=>['debug'=>true, 'limit'=>100]];
$code = var_export($data, true);
// $code = 'array (\n \'config\' => \n array (\n \'debug\' => true,\n \'limit\' => 100,\n ),\n)'
// 可直接作為 PHP 文件內容保存,include 執行還原
調試最佳實踐
// 1. 統一調試函數
function debug(mixed ...$vars): void {
if (php_sapi_name() === 'cli') {
foreach ($vars as $v) var_dump($v);
} else {
echo '';
foreach ($vars as $v) var_dump($v);
echo '';
}
}
// 2. 開發環境開啟,生產關閉
if (($_ENV['APP_DEBUG'] ?? false)) {
debug($user, $request, $response);
}
// 3. Xdebug + IDE 斷點調試 (生產級方案)
// 完全替代 var_dump/print_r,支持單步執行、變量觀察、調用棧
性能微基準 (100萬次)
| 函數 | 純字符串輸出 | 數組輸出 |
| echo | ~0.08s | N/A |
| print | ~0.12s | N/A |
| printf | ~0.25s | N/A |
| print_r | ~0.15s | ~1.2s |
| var_dump | ~0.18s | ~1.5s |
總結
- 模板輸出:
echo (最快、多參數)
- 表達式上下文:
print (唯一返回值可用)
- 格式化:
printf/sprintf
- 調試標量/數組/對象:
var_dump (類型完整、區分 false/null)
- 調試輸出捕獲/日誌:
print_r($var, true) / var_export($var, true)
- 生產代碼:移除所有調試輸出,使用 Xdebug + IDE 斷點