PHP 中字符串連接是基礎且高頻操作。本文介紹兩種核心連接方式:點運算符(.)與雙引號變量解析,並說明性能差異與最佳實踐。
<?php
$str1 = "Hello World!";
$str2 = "Welcome to PHP!";
// 基礎連接
$str3 = $str1 . " " . $str2;
echo $str3; // Hello World! Welcome to PHP!
// 連接賦值運算符
$msg = "User: ";
$msg .= $username;
$msg .= " logged in.";
?>
.= 追加模式,避免重複分配內存<?php
$author = "PHP開發者";
// 直接嵌入變量
$str = "Welcome to {$author}'s Blog!";
echo $str; // Welcome to PHP開發者's Blog!
// 複雜表達式需用花括號
$arr = ['name' => 'PHP'];
echo "Name: {$arr['name']}"; // Name: PHP
echo "Name: ${arr['name']}"; // 同效果
// 對象屬性
$obj = new stdClass();
$obj->version = '8.2';
echo "PHP {$obj->version}"; // PHP 8.2
?>
{} 清楚界定變量邊界,避免歧義<?php
$str = 'test';
$iterations = 1000000;
// 1. 點運算符
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$result = 'prefix_' . $str . '_suffix';
}
echo "點運算符: " . (microtime(true) - $start) . "s\n";
// 2. 雙引號插值
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$result = "prefix_{$str}_suffix";
}
echo "雙引號插值: " . (microtime(true) - $start) . "s\n";
// 3. sprintf
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$result = sprintf('prefix_%s_suffix', $str);
}
echo "sprintf: " . (microtime(true) - $start) . "s\n";
/*
點運算符: 0.18s
雙引號插值: 0.16s (略快)
sprintf: 0.42s (最慢,但格式化功能強)
*/
?>
雙引號插值通常略快於點運算符,但差異微小。sprintf 適合複雜格式化場景。
implode(),避免重複內存分配
$parts = [];
foreach ($items as $item) {
$parts[] = process($item);
}
$result = implode('', $parts);
<?php
// Heredoc:支持變量解析(雙引號行為)
$html = <<<HTML
<div class="container">
<h1>{$title}</h1>
<p>{$content}</p>
</div>
HTML;
// Nowdoc:不解析變量(單引號行為),PHP 5.3+
$code = <<<'CODE'
function test() {
echo $variable; // 不會被解析
}
CODE;
?>
掌握字符串連接細節,能寫出更高效、可維護的 PHP 代碼。