echo"示例"之间是否存在差异?和"示例"超出PHP标签?

时间:2017-10-16 09:37:13

标签: php tags echo

这个

之间有区别吗?
<?php
    myCode();
    echo "Example";
?>

<?php
    myCode();
?>
Example

此?

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

我已完成基准打印20000000次&#34;示例&#34;。我已经从CLI执行了脚本,而不是通过HTTP请求(Centos 7 64位)。

使用&#34; echo&#34;:153.06723901367sec

使用HTML:155.80555395508sec

2 个答案:

答案 0 :(得分:5)

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

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

从技术上讲,生成的OPCode的方式会有所不同,但这对性能没有任何影响。解析器大多数<?php标记之外的任何内容都被视为T_INLINE_HTML。然后是converted to an echo in the abstract syntax tree

|   T_INLINE_HTML { $$ = zend_ast_create(ZEND_AST_ECHO, $1); }

ZEND_AST_ECHO

case ZEND_AST_ECHO:
APPEND_NODE_1("echo");

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

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

答案 1 :(得分:-2)

是。第一个是PHP,第二个是HTML。

在第一种情况下,您可以这样做:

<?php
$var = 1;
echo "Example " . $var;
?>

第二种情况$var在HTML中未定义,因此将被忽略。

<?php
$var = 1;
?>
Example $var

如果你想在HTML中使用那个变量,你需要回到PHP,即

<?php echo $var; ?>

根据我的经验,这是一个偏好的东西,有些页面主要是HTML,可以这样写。但是,如果我正在编写PHP,我更喜欢坚持使用PHP,而不是在两种语言之间反弹。我不知道你可以用HTML做的任何你可以做的事情。这使得令人讨厌的代码很难调试 HTML标题也存在问题(请参阅PHP header()函数)。