<?php
$str1 = 'Hello';
$str2 = ' ';
$str3 = 'World';
// 逗號:多參數輸出 (語言構造特有)
echo $str1, $str2, $str3; // 輸出: Hello World
// 點號:字符串拼接運算符
echo $str1 . $str2 . $str3; // 輸出: Hello World
// 混合使用 (點號優先級高於逗號)
echo $str1 . $str2, $str3; // 等同 echo ($str1 . $str2), $str3;
?>
| 維度 | 逗號 echo $a, $b | 點號 echo $a . $b |
|---|---|---|
| 操作類型 | 多參數直接輸出 | 先拼接生成新字符串,再輸出 |
| 內存分配 | 無額外分配 | 需分配拼接結果字符串內存 |
| CPU 開銷 | 極低 (僅輸出) | 拼接循環複製字符 |
| 返回值 | 無 (語言構造) | 拼接後的字符串 (可賦值) |
| 優先級 | 最低 | 高於逗號 |
<?php
$iterations = 1_000_000;
$a = 'Hello';
$b = ' ';
$c = 'World';
// 逗號版
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
echo $a, $b, $c;
}
$commaTime = microtime(true) - $start;
// 點號版
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
echo $a . $b . $c;
}
$dotTime = microtime(true) - $start;
echo "逗號: {$commaTime:.4f}s\n";
echo "點號: {$dotTime:.4f}s\n";
echo "逗號快 " . (($dotTime - $commaTime) / $dotTime * 100) . "%\n";
// 典型輸出: 逗號快 15%-30% (視 PHP 版本、字符串長度)
?>
echo $name, ' 歡迎來到 ', $site, '!';$msg = $name . ' 歡迎來到 ' . $site . '!';
echo $msg;
func($a . $b);<?= $title, $content, $footer ?>echo 'DEBUG: ', $var, ' at ', __LINE__;// 錯誤
someFunc($a, $b); // 這是函數參數列表,非 echo 逗號
// 正確
someFunc($a . $b); // 傳遞拼接後的字符串
// 錯誤:echo 無返回值
$str = echo $a, $b; // Parse error
// 正確
$str = $a . $b;
echo $a, $b; // 僅輸出
Q: echo 逗號和點號哪個快?為什麼?
A: 逗號快。逗號是多參數直接輸出,無拼接內存分配與複製;點號需先拼接生成臨時字符串再輸出。Q: 能否在函數調用中用逗號分隔多個參數輸出?
A: 不能。函數參數列表逗號分隔的是獨立參數,func($a, $b)傳兩個參數;func($a . $b)傳一個拼接字符串。Q: 什麼時候必須用點號?
A: 需要字符串拼接結果作為值使用時:賦值、傳參、返回、三元運算符、數組鍵等。