繁体   English   中英

在PHP中串联ECHO语法

[英]Concatenating ECHO syntax in PHP

我使用echo .创建了一个小功能( WordPressecho .

/* .. 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>';

...有效 这是解决问题的“正确”方法,还是仅是可行的“ hack”? 有没有更好的方法?

逗号更快。

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

对于大多数应用程序来说,这不会对速度造成很大的影响,但是我通常还是习惯使用逗号来进行echo

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


编辑:现在,这就是为什么事情“乱序”的原因。 (向大家致歉,因为我刚才想通了,这是根本问题的全部时间。)当你echo. ,您需要先进行连接,然后再执行echo操作。 为此,需要首先评估每个表达式。 考虑一下:

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

PHP将首先评估(5+5) ,然后评估(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() ,它具有自己的输出,不返回任何内容,因此没有任何输出。

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

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

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

作为我将来的备忘录:

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

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

我无法重现此行为。 而且,据我所知,应该是相反的:回显(未评估)的值先出现,然后才产生回显的结果。

看来您正在混合两件事-评估和回应。
串联后,所有表达式依次求值:

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);

好吧,一个异位来对抗布拉德的异位。

他说逗号更快。
这是不正确的,而且如果说一辆新车的价格便宜了2美分,那么说一辆新车比另一辆便宜就不正确了。 有数千种差异-服务,礼物,到商店的距离等等-使得2美分的差异完全可以忽略不计。 一个理智的买家不会以任何方式考虑2美分的差异。
同样在这里。

这个答案只是骗人的,使您以错误的方式思考。 WordPress是世界上最慢的应用程序之一。 而且,如果真的想加快速度,他们就必须进行大量的性能分析和速度优化工作。 逗号到点的变化不会是这个数字。
这就是重点:人们知道逗号更快,并认为“我正在编写快速代码!!!” 虽然完全错误。 首先,代码本身总是很快的。 我的数据操作不会使您的代码变慢! 假设,Wordpresss每次都在解析并向内存加载数兆字节的本地化数据! 将此数据放入某个缓存中将使您的wordpress快2倍! 那就是我的“习惯”
即使您将代码中的所有点都更改为逗号,也永远无法衡量任何差异。 真正的差异,而不是人为的差异。 这尤其适用于echo因为没有理智的应用程序会使用回声数百万次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM