php - 在 PHP 中连接 ECHO 语法

标签 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*/

使用我所知道的“常规”连接语法...

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/

相关文章:

Windows 批处理 - ECHO 正在更改 %ERRORLEVEL%

php - 如何?通过 jQuery.ajax :POST and using php: file_put_contents(); 从 CodeMirror 编辑器发送 PHP 代码

php - 在另一个登录用户的桌面上执行 PHP 中的 shell 命令

php - WordPress pre_get_posts 类别过滤器删除自定义菜单项

javascript - 当用户在下拉列表中选择演讲者姓名时,只有演讲者的专业知识才会显示在下一个主题下拉列表中

C++中的C++函数声明,类型转换

windows - 仅在管道时无法回显右括号

R 使用 dplyr 选择向量元素语法

python - 我不断收到语法错误,不知何故,由于函数定义末尾的冒号

linux - 如何停止缓存 'echo'