这有什么区别
<?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
出于所有实用目的,不,没有相关的区别.在这两种情况下,您的脚本输出都将是"示例".在这两种情况下,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)
case ZEND_AST_ECHO:
APPEND_NODE_1("echo");
Run Code Online (Sandbox Code Playgroud)
但是,您的目标应该是尽可能地将逻辑与您的视图和模板分开,因为如果不这样做,它很容易导致意大利面条代码.根据经验,函数不应该回显,而是返回字符串.大多数框架只回显一次:在呈现响应时请求结束时.
由于您提到了"视图"和MVC:MVC中的视图不一定是模板,而是模型中特定数据的特定表示.它可以是最终呈现模板的代码.如果这就是你想要的,你可能想要查看一个模板引擎,比如Twig(尽管PHP本身就是一个模板引擎).