2009-01-10 61 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 
相关问题