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

PHP echo、print、print_r、printf、var_dump 詳解:輸出函數差異、返回值、調試最佳實踐

     編輯:PHP 相關知識

核心差異速查表

函數/語句類型返回值參數數量輸出能力典型用途
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.08sN/A
print~0.12sN/A
printf~0.25sN/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 斷點
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved