这两个版本之间有速度差异吗?
<?php echo $var; ?>
<?=$var?>
你推荐哪个,为什么?
性能差异是微不足道的。此外,使用 APC,性能差异为零,零,无。
短标签在 XML 中是有问题的,因为<?
它也是 XML 处理标签的标记。因此,如果您正在编写应该可移植的代码,请使用长格式。
请参阅http://www.php.net/manual/en/ini.core.phpshort_open_tag
中的描述
从技术上讲,解析器必须解析较长版本的每个字符,并且每次传输都有更多字符。
如果您的网络服务器没有“预编译”(即:缓存标记化的 PHP 页面),那么性能会略有不同。除非您开始谈论数十亿次运行,否则这应该是微不足道的。
性能方面,它是微不足道的。
正确使用说使用更长的,因为它更便携。亲自?我做较短的。
不,它们是相同的。如果你喜欢打字很多使用<?php echo $var; ?>
,否则只是节省时间<?=$var?>
。
在 php 5.3 短标签 ASP 样式的 <% %> 支持将被弃用,尽量避免这种情况并将代码重写为'<?php echo' format
,因为你不能使用<?xml ?>
例如内联。
你推荐哪个
都不是,除非你真的想允许 HTML 注入。(99% 的情况下,你不会。)
<?php echo htmlspecialchars($var); ?>
或者定义一个使用较短名称执行 echo(htmlspecialchars($arg)) 的函数,以避免所有输入。
我添加了一个较晚的答案,因为还没有人证明这一点,但答案是明确的,没有性能差异,特别是因为PHP 执行这两行代码的方式完全没有区别。
解释器在这两种情况下看到相同的代码。解析器产生完全相同的AST,因为<?=
它与<?php echo
. <?=
编写vs时解释器运行的指令没有区别<?php echo
。
通过安装php-ast,您可以检查两行代码生成的 AST。
鉴于这两种情况...
# CASE 1
<?php echo $i %>
# CASE 2
<?= $i ?>
两者的抽象语法树是相同的:
case 1
AST_STMT_LIST
0: AST_ECHO
expr: AST_VAR
name: "i"
case 2
AST_STMT_LIST
0: AST_ECHO
expr: AST_VAR
name: "i"
这意味着 PHP在运行时无法分辨它们之间的区别,更不用说体验某种性能差异了。
产生此输出的代码如下,并使用util.php:
<?php
require('util.php');
echo "case 1\n";
echo ast_dump(ast\parse_code('<?php echo $i ?>', $version=50));
echo "\n";
echo "case 2\n";
echo ast_dump(ast\parse_code('<?= $i ?>', $version=50));
echo "\n";
优化在这里无关紧要。选择取决于个人喜好,特别是因为<?=
始终可用,与短标签无关,从未被弃用,也不会从语言中删除。
我认为第二个需要将 short_open_tag(在 PHP.ini 中)设置为 true。
这意味着它有可能在某些网络服务器上被关闭。
速度差异取决于您输入这 9 个额外字符的速度。
它还可以提高代码的可读性,但这值得商榷。
如果您谈论执行速度,则没有明显差异。
不要试图用这些来优化,没用的。相反,停用 allow_short_tags(因为加载 XML 文件时出现问题)并编写干净、可读和可理解的代码。
即使可能有细微的差别(肯定低于 10%),用它来优化也没有用。如果您的脚本很慢,请先查看您的循环。大多数情况下,通过优化程序流程比使用奇怪的语法可以获得更多的性能。