PHP中的连接ECHO语法

PHP中的连接ECHO语法,php,syntax,echo,Php,Syntax,Echo,我使用echo创建了一个小函数()。 /* .. Some code */ switch ($linktype) { case "next": echo '<p class="next">' . previous_post_link('%link',''.$prevthumbnail.'') . '</p>'; break; case "prev": echo '<p class="prev">'

我使用
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*/
/*。。一些代码*/
交换机($linktype){
案例“下一个”:
回显“

”。上一个发布链接('%link','.$prevthumbnail')。

”; 打破 案例“prev”: 回显“

”。下一个发布链接('%link','.$nextthumbnail')。

”; 打破 } /* .. 其他代码*/
使用我知道的“常规”连接语法

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

'。上一个链接('%link','.$prevthumbnail.')。'

",;
…产生

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

我显然需要

。我发现一些帖子建议用逗号替换点(',),所以现在我有

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

,上一个链接('%link','.$prevthumbnail'),'

';

…这是有效的。这是一种解决问题的“正确”方法,还是一种行之有效的“黑客”方法?有更好的方法吗?

逗号更快。

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

这不会对大多数应用程序的速度造成很大的影响,但我通常习惯于在
echo
中使用逗号

如果你好奇的话,这里有一个基准:


编辑:现在,下面是事情“无序”的原因。(向所有人道歉,因为我刚刚发现这一直都是根本问题。)当您使用
进行
echo
时,在
echo
开始工作之前,您首先连接。为此,需要首先计算每个表达式。考虑这一点:

echo (5+5) . (10+10);
PHP将首先评估
(5+5)
,然后评估
(10+10)
。这相当于将其转化为:

echo 10 . 20;
然后这些需要连接,所以它们被转换成字符串,变成:

echo "1020";
这有意义吗?现在考虑函数<代码> PrimviouPaskLink()/<代码>。Tim说得很对,这个函数没有返回值。当对该函数求值时,它不返回任何内容,并回显某些内容。因此,如果我们这样做:

echo "test" . previous_post_link();
首先,对这两件事都进行了评估<代码>“test”
已经是一个字符串,但我们需要首先运行函数
previous\u post\u link()
,以获取其串联的返回值。运行时,
previous\u post\u link()<代码>“测试”
然后以零连接,连接通过
echo
输出

现在,假设我们改用逗号:

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

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

问题在于,
上一个发布链接(“%link”、“.$prevthumbnail.”)
函数实际上内置了自己的打印命令,并在echo完成打印后打印


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

好的,一个offtopic来抵消Brad的offtopic

他说逗号更快。
这是不对的,如果一辆新车的价格比另一辆便宜2美分的话,这也是不对的。服务、礼物、甚至到商店的距离等等,都有上千种不同,2美分的差别完全可以忽略不计。理智的买家无论如何都不会考虑2美分的差额。
这里也一样

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

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

我不能复制这种行为。而且,据我所知,应该是相反的:回声(未评估)值首先出现,然后是回声的结果

你似乎把两件事混为一谈——评价和回应。
连接后,依次计算所有表达式:

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

$a=1;

echo $a."|".aplus(1).$a."||".aplus(1).$a;
如果您不习惯将echo与具有自己输出的语句混合使用,则首先使用此单独的echo:

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

$a=1;

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

作为我未来的备忘录:

$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!

@凯尔,你最好对此一无所知。这个“基准”毫无意义。更不用说整个答案完全脱离主题。@Col.Shrapnel,能解释一下我的答案是如何脱离主题的吗?几乎任何一天你都会发布这样的内容,所以我同意你的观点,但这次你让我难堪了。谢谢大家,但我的问题不是关于速度,而是关于php学习。我想知道什么时候应该使用逗号和wh