在PHP中连接ECHO语法

kre*_*o99 12 php syntax echo

我做了一个小功能(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()被评估,它有自己的输出,并且什么都不返回,因此没有输出任何内容.

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

  • 呵呵.我从来不知道这一点.+1 (3认同)
  • 谢谢大家,但我的问题与速度无关,而与 php 学习有关。我想了解什么时候应该使用逗号,什么时候应该使用点。我如何预测未来的这种行为?我怎么知道回声结果顺序是什么?因为在我的例子中,它只是回应了 HTML 部分,并且只是在函数之后......无论如何,@brad:感谢你的信息和链接......我现在认为这样做是正确的,尽管我我仍然对“为什么”和未来的“如何”感到困惑 (2认同)

Tim*_*Tim 7

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

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