| 函數 | 類型 | 返回值 | 參數 | 主要用途 |
|---|---|---|---|---|
| echo | 語言結構 | 無 | 多個 (逗號分隔) | 高性能輸出字符串 |
| 語言結構 | 1 (int) | 單個 | 可用於表達式上下文 | |
| printf | 函數 | 輸出長度 (int) | 格式化字符串 + 多參數 | 格式化輸出 |
| sprintf | 函數 | 格式化字符串 | 格式化字符串 + 多參數 | 格式化生成字符串 |
| print_r | 函數 | bool/string | 變量 [, bool $return] | 結構化輸出數組/對象 |
| var_dump | 函數 | 無 | 多個變量 | 調試:類型、長度、值全顯示 |
<?php
echo "Hello", " World"; // 多參數逗號分隔 (無括號時)
echo ("Hello World"); // 單參數可加括號
// echo ("Hello", "World"); // 錯誤:加括號只能單參數
$name = "PHP";
echo "Hello $name"; // 雙引號解析變量
echo 'Hello $name'; // 單引號不解析
// 無法用於賦值
// $a = echo "test"; // Parse error
?>
<?php
$a = print("Hello"); // 合法,$a = 1
print "World"; // 輸出 World
// print "A", "B"; // 錯誤:只接受單參數
?>
<?php
// 常用格式符
printf("姓名: %s, 年齡: %d, 身高: %.2f\n", "張三", 25, 175.5);
// 姓名: 張三, 年齡: 25, 身高: 175.50
// 參數交換 (位置指定)
printf("第二: %2\$s, 第一: %1\$s\n", "A", "B");
// 第二: B, 第一: A
// sprintf 返回字符串不輸出
$sql = sprintf("SELECT * FROM users WHERE id = %d AND status = '%s'", 1, 'active');
// $sql = "SELECT * FROM users WHERE id = 1 AND status = 'active'"
// 格式符速查
// %s 字符串 %d 整數 %f 浮點數 %.2f 保留兩位小數
// %x 十六進制小寫 %X 大寫 %o 八進制 %b 二進制
// %c ASCII字符 %% 字面% %e 科學計數法
?>
<?php
$arr = ['name' => 'PHP', 'ver' => [7, 8, 8]];
print_r($arr);
/* 輸出:
Array
(
[name] => PHP
[ver] => Array
(
[0] => 7
[1] => 8
[2] => 8
)
)
*/
// 第二參數 true 返回字符串
$str = print_r($arr, true);
file_put_contents('debug.log', $str);
?>
<?php
$str = "Hello";
var_dump($str); // string(5) "Hello"
$arr = [1, 2, 3];
var_dump($arr);
/* array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
} */
$obj = new stdClass();
$obj->x = 1;
var_dump($obj); // object(stdClass)#1 (1) { ["x"]=> int(1) }
// 多變量一次調試
var_dump($str, $arr, $obj);
?>
<?php
$arr = ['a' => 1, 'b' => [2, 3]];
echo var_export($arr, true);
/* 輸出:
array (
'a' => 1,
'b' =>
array (
0 => 2,
1 => 3,
)
)
*/
// 可直接作為 PHP 代碼引入
?>
理解六大輸出函數的類型差異 (語言結構 vs 函數)、返回值、參數特性、適用場景,能寫出更簡潔、高性能、可維護的 PHP 代碼。調試時善用 `var_dump`、`print_r`,生產輸出首選 `echo`。