【问题标题】:Is there difference between echo "example" and "example" out of PHP tags? [duplicate]PHP 标签中的 echo "example" 和 "example" 有区别吗? [复制]
【发布时间】:2018-03-27 18:55:49
【问题描述】:

这有区别吗

<?php
    myCode();
    echo "Example";
?>

<?php
    myCode();
?>
Example

这个?

就性能而言,最佳选择是什么?

我已经完成了 20000000 次“示例”的基准打印。我已经从 CLI 执行了脚本,而不是通过 HTTP 请求(Centos 7 64bit)。

使用“回声”:153.06723901367sec

使用 HTML:155.80555395508 秒

【问题讨论】:

  • 浏览量是什么意思?
  • 没有实际区别。选择更具可读性的内容。
  • @shashi: "从最后一个中删除 php 脚本"??
  • 在这个级别上,它确实没有任何显着差异。这只是关于可读性。

标签: php tags echo


【解决方案1】:

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

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

从技术上讲,生成 OPCode 的方式会有所不同,但这对性能没有相关影响。大多数&lt;?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 是它自己的模板引擎)。

【讨论】:

  • 是的。我通常在 PHP 中使用 Smarty,在 JS 中使用 Handlebar。这只是一个关于性能的问题,我从不使用意大利面条代码之类的逻辑内部视图:)
  • @TheDeveloper 性能方面没有相关差异。此外,每当询问性能时,请帮自己一个忙,并在应用程序的上下文中进行基准测试,以获得有意义的数字。
  • 好的,我会做一个基准测试。
  • 我刚刚阅读了编辑。哇!有趣的是,这正是我想要的!
【解决方案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 中做什么,而您不能从 PHP 中生成。它会生成难以调试的难看代码。
HTML 标头也存在问题(请参阅PHP header() 函数)。

【讨论】:

  • 两种情况下的操作码完全相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多