我做了一个小功能(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*/
Run Code Online (Sandbox Code Playgroud)
使用我知道的"常规"连接语法...
echo '<p class="next">'. previous_post_link('%link',''.$prevthumbnail.'') . '</p>';
Run Code Online (Sandbox Code Playgroud)
... ...产生
<p class="next"></p>< result of previous_post_link() >
Run Code Online (Sandbox Code Playgroud)
我显然需要<p class="next">< result of previous_post_link() ></p>
.我找到了一些建议用逗号(',')代替点('.')的帖子,所以现在我...
echo '<p class="next">' , previous_post_link('%link',''.$prevthumbnail.'') , '</p>';
Run Code Online (Sandbox Code Playgroud)
......有效.这是解决问题的"正确"方法,还是仅仅是"黑客"有效?有更好的方法吗?
Bra*_*rad 25
逗号更快.
该echo
构造允许多个"参数".当你echo
用逗号,输出直接寄到一块缓冲件.使用时.
,必须首先连接.
对于大多数应用程序来说,这不会对速度产生很大影响,但我通常会习惯使用逗号echo
.
如果你很好奇,这是一个基准:http: //www.electrictoolbox.com/php-echo-commas-vs-concatenation/
编辑:现在,这就是为什么事情"乱序".(向所有人道歉,因为我刚才发现这是一直存在的根本问题.)当你echo
使用时.
,你先连接起来然后echo
才能完成它的工作.为此,需要首先评估每个表达式.考虑一下:
echo (5+5) . (10+10);
Run Code Online (Sandbox Code Playgroud)
PHP将首先评估(5+5)
然后(10+10)
.这相当于把它变成了这个:
echo 10 . 20;
Run Code Online (Sandbox Code Playgroud)
然后这些需要连接,所以它们被转换为字符串并成为这个:
echo "1020";
Run Code Online (Sandbox Code Playgroud)
那有意义吗?现在考虑这个功能previous_post_link()
.@Tim非常正确,这个函数没有返回值.当评估该函数时,它不返回任何东西并回声.所以,如果我们这样做:
echo "test" . previous_post_link();
Run Code Online (Sandbox Code Playgroud)
首先,评估两件事. "test"
已经是一个字符串,但我们需要首先运行该函数previous_post_link()
以获取其连接的返回值.运行时,previous_post_link()
输出一些东西,什么也不返回. "test"
然后与任何东西连接,并通过输出连接echo
.
现在,假设我们使用逗号代替:
echo "test", previous_post_link();
Run Code Online (Sandbox Code Playgroud)
PHP echo
按顺序评估构造的所有"参数" ,并输出它们.首先"test"
是输出,然后previous_post_link()
被评估,它有自己的输出,并且什么都不返回,因此没有输出任何内容.
我希望这更清楚.发布,如果没有.
问题是WordPress previous_post_link('%link',''.$prevthumbnail.'')
函数实际上有内置的打印命令,并在echo完成打印后打印.
如果要在回显中使用此命令(或保存为字符串),必须使用get_previous_posts_link
,而不是打印该值返回它.