在PHP中连接ECHO语法

时间:2011-11-13 03:07:18

标签: php syntax echo

我使用echo .

创建了一个小函数(WordPress
/* .. Some code */
switch ($linktype) {
    case "next":
        echo '<p class="next">' . previous_post_link('%link',''.$prevthumbnail.'') . '</p>';
        break;
    case "prev":
        echo '<p class="prev">' . next_post_link('%link',''.$nextthumbnail.'') . '</p>';
        break;
}
/* .. Some other code*/

使用我所知道的“常规”连接语法......

echo '<p class="next">'. previous_post_link('%link',''.$prevthumbnail.'') . '</p>';

... ...产生

<p class="next"></p>< result of previous_post_link() >

我显然需要<p class="next">< result of previous_post_link() ></p>。我发现有些帖子建议用逗号(',')替换('。')这些点,所以现在我有......

echo '<p class="next">' , previous_post_link('%link',''.$prevthumbnail.'') , '</p>';

......哪个有效。这是解决问题的“正确”方法,还是仅仅是“黑客”有效?有更好的方法吗?

5 个答案:

答案 0 :(得分:24)

逗号更快。

echo构造允许多个“参数”。当您使用逗号echo时,输出将逐个直接发送到缓冲区。使用.时,必须先连接。

对于大多数应用程序来说,这不会对速度产生很大影响,但我通常会习惯使用逗号echo

如果你很好奇,这是一个基准: http://www.electrictoolbox.com/php-echo-commas-vs-concatenation/


编辑:现在,这就是为什么事情“乱序”。 (向所有人道歉,因为我刚才发现这是一直存在的根本问题。)当你echo.时,你在echo完成工作之前先连接起来。为此,需要首先评估每个表达式。考虑一下:

echo (5+5) . (10+10);

PHP将首先评估(5+5),然后评估(10+10)。这相当于把它变成了这个:

echo 10 . 20;

然后这些需要连接起来,所以它们被转换为字符串并成为这个:

echo "1020";

这有意义吗?现在考虑函数previous_post_link()。 @Tim非常正确,这个函数没有返回值。当评估该函数时,它不返回任何东西并回声。所以,如果我们这样做:

echo "test" . previous_post_link();

首先,评估两件事。 "test"已经是一个字符串,但我们需要首先运行函数previous_post_link()以获取其连接的返回值。运行时,previous_post_link()输出一些内容,并且不返回任何内容。然后"test"与任何内容连接,并通过echo输出连接。

现在,假设我们使用逗号代替:

echo "test", previous_post_link();

PHP按顺序评估echo构造的所有“参数”,并输出它们。首先,输出"test",然后评估previous_post_link(),它有自己的输出,并且不返回任何内容,因此不会输出任何内容。

我希望这更清楚。如果没有发布。

答案 1 :(得分:7)

问题是WordPress previous_post_link('%link',''.$prevthumbnail.'')函数实际上内置了自己的打印命令,并在echo完成打印后打印。

如果要在回显中使用此命令(或保存为字符串),则必须使用get_previous_posts_link,而不是打印返回它。

答案 2 :(得分:1)

  

当使用点时,需要以某种方式评估的所有内容(表达式,函数)将不可避免地“推”到最后?

我无法重现此行为。并且,根据我的知识,它应该是相反的:回声(未评估)值首先出现,然后是回声的结果。

似乎你正在混合两个问题 - 评估和回应 连接时,所有表达式依次进行评估:

function aplus($b){
  global $a;
  $a += $b;
}

$a=1;

echo $a."|".aplus(1).$a."||".aplus(1).$a;

虽然如果你将echo与具有自己输出的语句混合在一起是不好的做法,那么这个单独的回声是第一个:

function e($s){
  echo $s;
}

$a=1;

echo $a."|".e($a +1)."||".e($a+2);

答案 3 :(得分:1)

作为我的未来备忘录:

$squarer = function ($x) { $out = $x*$x; echo "done!\n"; return $out; };

echo 'The square of 2 is ' . $squarer(2) . "!\n";
echo 'The square of 2 is ', $squarer(2), "!\n";

// **** OUTPUT ****
// done!
// The square of 2 is 4!
// The square of 2 is done!
// 4!

答案 4 :(得分:0)

好吧,这是一个反对Brad的offtopic的offtopic。

他说逗号更快 事实并非如此,如果一辆新车比另一辆更便宜,如果它的价格低2美分,那是不正确的。有成千上万的差异 - 服务,礼品,甚至到商店的距离等 - 使2美分的差异完全可以忽略不计。一个理智的买家不会以任何方式考虑2美分的差额 同样在这里。

这个答案只是欺骗,让你想错路。 Wordpress是世界上最慢的应用程序之一。 如果真的想加快速度,他们必须做大量的分析和速度优化工作。更改逗号到点不会出现在该数字中 这就是重点:人们知道逗号更快,并且认为“我正在编写快速代码!”虽然这是完全错误的。首先,代码本身总是很快。我的数据操作让你的代码变慢了!比方说,Wordpresss每次调用时都会解析并将几兆字节的本地化数据加载到内存中!将此数据放入某个缓存将使您的wordpress速度提高2倍!这就是我“养成习惯”的原因 即使您将代码中的所有点更改为逗号,您也永远无法衡量任何差异。真正的区别,而不是人为的差异。这特别适用于echo,因为没有理智的应用程序会使用echo数百万次。