是有區別或比其他下面的一個更好:PHP:連接1行還是多行會更好嗎?還是有區別?
$var = '';
...
$var .= 'blah blah';
$var .= $var2;
$var .= 'blah blah';
或者
$var = '';
...
$var .= 'blah blah' . $var2 . 'blah blah';
是否有轉速差或者是有一個原因,你會選擇一個比其他?
是有區別或比其他下面的一個更好:PHP:連接1行還是多行會更好嗎?還是有區別?
$var = '';
...
$var .= 'blah blah';
$var .= $var2;
$var .= 'blah blah';
或者
$var = '';
...
$var .= 'blah blah' . $var2 . 'blah blah';
是否有轉速差或者是有一個原因,你會選擇一個比其他?
如果回顯字符串,則會有一個小差異。
echo $var1,$var2,$var3 // comma (echo with multiple arguments)
比
echo $var1.$var2.$var3 // dot (concat and echo)
我不認爲你會注意到這麼短的情況。我通常會決定我將要使用的可讀性原因。我只在兩種情況下分開,否則在一行上:
a)創建多行響應,以便代碼模仿用戶將看到的內容。我發現這樣可以更容易地發現錯別字和錯誤。
$var = "line 1 \n";
$var .= "line 2 \n";
b)行長度。如果該行會溢出我的窗口,我通常會分解它,所以我不必到行尾讀取結尾。大多數語言都支持續行字符,所以我並不需要在代碼中進行物理分解,但是由於我使用某些沒有它的語言工作,所以這只是一種習慣。
要「打破它在物理中的代碼」,你一拳你的電腦或只是我們的一個非常小的磁鐵? – thrashr888 2009-01-10 20:23:52
它沒有幾個,總之,無論弦稍快。使用任何更清晰的閱讀。
但是,如果你有很多(比如數千)不是那麼短的,你可能想把它們放在一個數組中,並將它們連接在一起。 (正如它發生的那樣,這樣的代碼通常像使用「。=」連接字符串一樣容易閱讀,所以你不會犧牲性能的祭壇的清晰度。)
編輯:我不認爲我的上面思考是有效的。 PHP的字符串是可變的,對吧?
對於任何在代碼中手動連接的東西,性能可能並不重要,因此可讀性至關重要。對我而言,這通常意味着使用heredoc語法。我不喜歡它打破我的縮進結構的方式,但是當您想要將換行符和/或製表符正確插入到字符串中時,它特別好。
將大量數據轉化爲單個字符串的最快方法是輸出緩衝以捕獲echo'd輸出。
ob_start();
/* many echos. For example, in a loop */
$outString = ob_get_contents(); // get the complete string
ob_end_clean();
一般情況下,它不可能讓你的程序的速度顯著區別,所以使它看起來很明顯,你在做什麼,因爲你要回來修復/更新後進不去。可讀性是王道。
PEZ和Topbit都是正確的。我只是想指出的東西,我覺得看起來比已經在這裏看到:
$var = "line 1 \n";
$var .= "line 2 \n";
與
$var = "line 1 \n"
. "line 2 \n";
我更喜歡第二個到第一個在視覺上很明顯的結果是一個字符串$ var。它還可以防止像以下這樣愚蠢的錯誤:
$var = "line 1 \n";
$var .= "line 2 \n";
$vat .= "line 3 \n";
$var .= "line 4 \n";
不會有所作爲。兩者都是串聯的,所以最簡單的就是你應該使用的東西。
如果您是最佳表現之後,請嘗試使用數組,然後在完成後對它進行分解。
$var = array();
$var[] = "line 1\n";
$var[] = "line 2\n";
$var[] = "line 3";
$var = implode('', $var);
任何方式你做它的速度差異將忽略不計,除非你正在處理數以千計的大字符串。
沒有意義的區別。這只是編碼偏好的問題。
我有一個預感,使數組,然後內爆可能是最快的方式。我錯了!然而,做一個$ str = $ str + $ bla的速度真的很慢!只要你做了大量的連接,它就很重要。這裏是我的測試代碼:
<?php
function doit($n) {
$str2concat = 'Esta es una prueba. ¿Cuál manera es más rápida?';
$str = '';
// option 1
$start = microtime(true);
for($i=0; $i <= $n; $i++) {
$str .= $str2concat;
}
$end = microtime(true);
echo " Concat: $n Iterations, duration:" . ($end-$start) . "\n";
// option 2
$str = '';
$start = microtime(true);
for($i=0; $i <= $n; $i++) {
$str = $str . $str2concat;
}
$end = microtime(true);
echo "Concat2: $n Iterations, duration:" . ($end-$start) . "\n";
// option 3
$str = [];
$start = microtime(true);
for($i=0; $i <= $n; $i++) {
$str[] = $str2concat;
}
$str = implode($str);
$end = microtime(true);
echo "Implode: $n Iterations, duration:" . ($end-$start) . "\n\n";
}
doit(5000);
doit(10000);
doit(100000);
下面是我得到的結果:
Concat: 5000 Iterations, duration:0.0031819343566895
Concat2: 5000 Iterations, duration:0.41280508041382
Implode: 5000 Iterations, duration:0.0094010829925537
Concat: 10000 Iterations, duration:0.0071289539337158
Concat2: 10000 Iterations, duration:1.776113986969
Implode: 10000 Iterations, duration:0.013410091400146
Concat: 100000 Iterations, duration:0.06755805015564
Concat2: 100000 Iterations, duration:264.86760401726
Implode: 100000 Iterations, duration:0.12707781791687
這不是問題,雖然... – nickf 2009-02-02 02:29:07