我做了一个小函数(WordPress),使用echo .
/* .. 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>';
...有效。这是解决问题的“正确”方法,还是只是一种有效的“技巧”?有没有更好的方法?
最佳答案
逗号更快。
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()
求值,它有自己的输出,并且什么都不返回,所以它什么也不输出。
我希望这更清楚。如果没有,请发布。
关于php - 在 PHP 中连接 ECHO 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109322/