2009-01-10 23 views

回答

6

如果回顯字符串,則會有一個小差異。

echo $var1,$var2,$var3 // comma (echo with multiple arguments) 

echo $var1.$var2.$var3 // dot (concat and echo) 
+15

這不是問題,雖然... – nickf 2009-02-02 02:29:07

0

我不認爲你會注意到這麼短的情況。我通常會決定我將要使用的可讀性原因。我只在兩種情況下分開,否則在一行上:

a)創建多行響應,以便代碼模仿用戶將看到的內容。我發現這樣可以更容易地發現錯別字和錯誤。

$var = "line 1 \n"; 
$var .= "line 2 \n"; 

b)行長度。如果該行會溢出我的窗口,我通常會分解它,所以我不必到行尾讀取結尾。大多數語言都支持續行字符,所以我並不需要在代碼中進行物理分解,但是由於我使用某些沒有它的語言工作,所以這只是一種習慣。

+0

要「打破它在物理中的代碼」,你一拳你的電腦或只是我們的一個非常小的磁鐵? – thrashr888 2009-01-10 20:23:52

6

它沒有幾個,總之,無論弦稍快。使用任何更清晰的閱讀。

但是,如果你有很多(比如數千)不是那麼短的,你可能想把它們放在一個數組中,並將它們連接在一起。 (正如它發生的那樣,這樣的代碼通常像使用「。=」連接字符串一樣容易閱讀,所以你不會犧牲性能的祭壇的清晰度。)

編輯:我不認爲我的上面思考是有效的。 PHP的字符串是可變的,對吧?

+0

遺憾的是要取消這PEZ,但它似乎是一個很好的答案,其他人認爲是有益的,所以我冒昧。 – nickf 2009-02-02 02:31:20

+0

我擔心人們會認爲這是真的。這可能不適用於PHP。這是我的脊柱反應,因爲我工作的大多數語言都有不變的字符串。 – PEZ 2009-02-02 10:28:57

+0

在像Lua這樣的語言中,情況確實如此。然而,我的直覺告訴我,當涉及大量字符串時,PHP可以從數組連接方法中受益 - 這是由於可能在每個並置中重新分配內存。我只需要嘗試一下! – 2015-11-13 02:01:22

2

對於任何在代碼中手動連接的東西,性能可能並不重要,因此可讀性至關重要。對我而言,這通常意味着使用heredoc語法。我不喜歡它打破我的縮進結構的方式,但是當您想要將換行符和/或製表符正確插入到字符串中時,它特別好。

0

將大量數據轉化爲單個字符串的最快方法是輸出緩衝以捕獲echo'd輸出。

ob_start(); 
/* many echos. For example, in a loop */ 
$outString = ob_get_contents(); // get the complete string 
ob_end_clean(); 

一般情況下,它不可能讓你的程序的速度顯著區別,所以使它看起來很明顯,你在做什麼,因爲你要回來修復/更新後進不去。可讀性是王道。

19

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"; 
3

不會有所作爲。兩者都是串聯的,所以最簡單的就是你應該使用的東西。

如果您是最佳表現之後,請嘗試使用數組,然後在完成後對它進行分解。

$var = array(); 
$var[] = "line 1\n"; 
$var[] = "line 2\n"; 
$var[] = "line 3"; 
$var = implode('', $var); 

任何方式你做它的速度差異將忽略不計,除非你正在處理數以千計的大字符串。

0

沒有意義的區別。這只是編碼偏好的問題。

0

我有一個預感,使數組,然後內爆可能是最快的方式。我錯了!然而,做一個$ 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 
相關問題