PHP标签中的echo"example"和"example"之间有区别吗?

Jus*_*per -6 php tags echo

这有什么区别

<?php
    myCode();
    echo "Example";
?>
Run Code Online (Sandbox Code Playgroud)

<?php
    myCode();
?>
Example
Run Code Online (Sandbox Code Playgroud)

这个?

在性能方面,最佳选择是什么?

我做了一个Benchmark打印20000000次"示例".我已经从CLI执行了脚本,而不是通过HTTP请求(Centos 7 64位).

使用"echo":153.06723901367sec

使用HTML:155.80555395508sec

Gor*_*don 5

出于所有实用目的,不,没有相关的区别.在这两种情况下,您的脚本输出都将是"示例".在这两种情况下,myCode()之前都已执行过.

实际上,两种情况下的OPCode都是相同的,因为PHP会回显<?php标签之外的所有内容.它基本上只是一个隐含的回声.

从技术上讲,生成的OPCode的方式会有所不同,但这对性能没有任何影响.大多数<?php标签之外的任何东西都被T_INLINE_HTML解析器视为.然后将其转换为抽象语法树中的echo:

|   T_INLINE_HTML { $$ = zend_ast_create(ZEND_AST_ECHO, $1); }
Run Code Online (Sandbox Code Playgroud)

ZEND_AST_ECHO

case ZEND_AST_ECHO:
APPEND_NODE_1("echo");
Run Code Online (Sandbox Code Playgroud)

但是,您的目标应该是尽可能地将逻辑与您的视图和模板分开,因为如果不这样做,它很容易导致意大利面条代码.根据经验,函数不应该回显,而是返回字符串.大多数框架只回显一次:在呈现响应时请求结束时.

由于您提到了"视图"和MVC:MVC中的视图不一定是模板,而是模型中特定数据的特定表示.它可以是最终呈现模板的代码.如果这就是你想要的,你可能想要查看一个模板引擎,比如Twig(尽管PHP本身就是一个模板引擎).