是有区别或比其他下面的一个更好: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