是否可以使用PHP短标签?


522

这是根据官方文档提供的信息:

在PHP中可以使用四对不同的开始和结束标记。其中的两个<?php ?><script language="php"> </script>始终可用。另外两个是短标签和ASP样式标签,可以从php.ini配置文件中打开和关闭它们。因此,虽然有些人觉得短标签和ASP样式标签很方便,但它们的可移植性较差,通常不建议这样做

以我的经验,大多数服务器确实启用了短标签。打字

<?=

比打字要方便得多

<?php echo 

程序员的便利性是一个重要因素,那么为什么不推荐他们呢?


61
为了回答这一why部分,我引用了Zend PHP 5认证指南:“一段时间以来,短标签是PHP世界中的标准;但是,它们的确存在与XML标头冲突的主要缺点,因此在某种程度上具有跌倒了。”
蓬松的

7
出现该问题的用例是什么,这是否意味着开发人员使用PHP生成XML会很痛苦?
Jon z

9
假设您有要公开的XML文档,但是无论出于何种原因,您都希望这些文档可被php解析,因此您可以使浏览器解析.xml。您使用短标签将其打开,然后突然通过XML标头对XML文档进行了解析,从而破坏了工作。让我发疯了很久以前想弄清楚这个问题。自从在我运行的任何服务器上禁用短代码以来,与我合作的任何团队都不得不求助于非短代码
Thenetimp

43
从PHP 5.4.0开始,short_open_tag指令不包含short echo标签 <?= $example;?>!这一点非常重要,因为所有其他短标签的使用被认为是徒劳的。无论如何,从现在开始鼓励使用短回显标记。它确实提供了更平滑和整洁的代码库-esp。在视图文件中。因此,对于PHP> = 5.4.0, <?= ?>可以不进行设置 short_open_tag。请不要在代码中使用其他短标签。当您这样做时,代码神会非常生气……
Borislav Sabev 2013年

6
我要添加这个作为一个快速评论,因为已经有太多的较长的答案:<?是不是在XML的开放使用<?xml version="1.0" ?>声明; 它是“处理指令”的通用语法,第二个最常见的示例是<?xml-stylesheet ... ?><?php实际上可以被视为有效的处理指令<?=(如5.4+所允许),但同时声明全部内容<?也会在语法之间产生不必要的冲突。
IMSoP

Answers:


374

不建议使用它们,因为如果您不得不将代码移动到不支持该代码的服务器上(并且无法启用它),则它是PITA。就像您说的那样,许多共享主机确实支持短标记,但“批”并不是全部。如果要共享脚本,最好使用完整语法。

我同意这一点,<?并且<?=在程序员上比<?php和更容易,<?php echo但是只要您每次都使用相同的表单(并且不要占用空格(例如:<? php<? =)),就可以进行批量查找和替换。

我完全不将可读性作为理由。大多数认真的开发人员可以选择语法突出显示。

正如ThiefMaster在评论中提到的那样,从PHP 5.4开始<?= ... ?>,无论shorttags设置如何,标记在任何地方都受支持。这应该意味着它们在可移植代码中可以安全使用,但这确实意味着对PHP 5.4+的依赖。如果您想支持5.4之前的版本并且不能保证使用短标记,则仍然需要使用<?php echo ... ?>

另外,您需要知道ASP标记<%,%>,<%=和脚本标记已从PHP 7中删除。因此,如果您想支持长期的可移植代码,并且想要切换到最现代的工具,请考虑更改该部分代码。


91
因此,解释是:它们不好是因为不被支持?但是为什么不支持它们呢?因为它们不是规范的一部分?好的,但是为什么它们不属于规范的一部分?我对这个答案感到失望。
2009年

61
我不是在这里讨论“大问题”,例如我们为什么在这里,如何开始等等。在共享服务器上不能保证Shorttag支持,并且在下一个主要版本中将完全删除它。这就是您所需要知道的。
奥利

39
强制性PHP 模板引擎。:P
语法错误

49
短标签没有被淘汰。仅ASP样式的短标签。
Brian Lacy 2010年

46
在PHP 5.4的(非常接近的)将来,<?=的使用将与启用或禁用short_open_tags分开。<?=并没有被淘汰,相反,现在它被认为是该语言的基本组成部分。
Griever先生2012年

175

我实在不愿意<?=$whatever?>放弃它。从来没有问题。我要等到它咬到我的屁股。认真地说,在极少数情况下,有85%的(我)客户端可以访问php.ini 。另外15%使用主流托管服务提供商,并且几乎所有提供商都启用了它们。我爱他们。


41
@B七如果您试图避免可能出现的每一个理论问题,那么您的代码几乎肯定是效率低下的。在PHP小组同意逐步淘汰短标签(而不是ASP标签)之前,与其他可以花费时间进行“修复”的事情相比,被咬的担心要少得多,潜在的解决方案要简单得多。
SamGoody

18
如果它会叮咬您,请转到更好的托管服务
Lie Ryan

4
我真的不同意不使用某些东西,因为它可能不受支持。我们是否应该不使用服务器可能不支持的任何其他功能?MYSQL vs MYSQLI?您将一点一点地浪费您的时间,一次又一次地写长标签,以避免极少的机会花费一点时间更改为更好的主机。
院长或

2
@BSeven,您是否表示除了默认的出厂扩展名外,您不使用任何PHP扩展名?
Pacerier,2015年

143

从PHP 5.4开始,echo快捷键是与短标签分开的问题,因为echo快捷键将始终启用。现在是事实:

因此,echo快捷方式本身(<?=)现在可以安全使用。


19
我会说这是唯一需要的“短标签”。<?php可以在所有类文件的开头使用,然后使用<?=。双赢。
Xeoncross

6
So the echo shortcut itself (<?=) is safe to use...只要您愿意使用PHP 5.4。分布广泛的PHP应用程序(如wordpress)没有5.4的要求,甚至一直提供PHP 4支持,直到2011年-PHP 5发布后整整7年。如果您位于Facebook之类的地方,所有软件安装均由公司本身直接运营,那么与正在处理诸如wordpress之类的项目相比,要求5.4支持要容易得多。
Frank Farmer 2012年

哇,@ dukeofgaming很不错,他不知道他们的SVN修订版可以在网络上访问。
Pacerier,2015年

82

整个讨论的问题在于使用PHP作为模板语言。没有人争辩说应该在应用程序源文件中使用标签。

但是,PHP的可嵌入语法允许它用作功能强大的模板语言,并且模板应尽可能简单易读。许多人发现使用更慢,更慢的附加模板引擎(如Smarty)更容易,但是对于我们当中那些需要快速渲染和纯代码库的纯粹主义者而言,PHP是编写模板的唯一方法。

反对使用短标签的唯一有效参数是并非所有服务器都支持短标签。关于与XML文档冲突的评论很可笑,因为您可能无论如何都不应该混用PHP和XML。如果是这样,则应该使用PHP输出文本字符串。安全永远不会成为问题,因为如果您将敏感信息(例如数据库访问凭据)放入模板文件中,那么问题就更大了!

现在,关于服务器支持的问题,必须承认,他们必须了解其目标平台。如果共享托管是可能的目标,则应避免使用短标签。但是对于许多专业开发人员(例如我本人),客户承认(确实取决于事实),我们将决定服务器的要求。通常,我负责自己设置服务器。

而且,我们永远不会与无法完全控制服务器配置的托管服务提供商合作-在这种情况下,我们可以指望运行时遇到的麻烦不仅仅是丢失短标签支持。只是没有发生。

是的,我同意短标签的使用应谨慎权衡。但是我也坚信,应该始终将其作为一种选择,并且意识到自己的环境的开发人员应该可以随意使用它们。


6
如果出于某种原因,您已将Apache设置为将.xml文件传递给mod_php,则<?xml会很麻烦,并且带有短标签。但这显然是一个奇怪的设置。
Frank Farmer 2010年

3
如果没有解决方法,无法在某些类型的输出文档中嵌入的模板语言是很大的失败。我不应该使用带有PHP代码和短标签的XML模板的唯一原因是因为它不起作用,而不是因为它没有意义。
Vinko Vrsalovic

8
充分利用PHP作为快速,便捷的模板语言的优势并不是“大失败”。正如我之前所说的,这是权衡利弊并以适合您所选择方法的方式编写代码的问题。不要仅仅因为它不能在一种特定的情况下工作(可以很容易地解决)而断然拒绝一种有效的方法。
Brian Lacy

5
我不会断然拒绝任何有效的方法(请参阅我对问题的回答。)您是那种完全断然拒绝XML中的PHP的人,我引用:“无论如何,您不应该混用PHP和XML”。另外,我指的最大的失败是决定<?用作短标签,因为它导致XML的变通方法。就是说,我同意这是权衡利弊的问题,而且,如果您知道自己在做什么,那么您当然可以做到。但这并不是<?一个好的选择。
Vinko Vrsalovic

3
我参加聚会有点晚了,但是我真的很喜欢这个答案,它反映了我对这种情况的经验。尽管我们在办公室中对这个问题有一些分歧,但我可以说,由于使用php多年几乎每天都在工作,所以我从未遇到过这个问题。当使用PHP生成XML时,以我的经验来看,它始终是在高度动态的内容中使用的,从来没有通过PHP直接对其进行模板化,因此问题从来就不会出现。
redreinard

33

由于Zend Framework在其默认MVC配置中推出了“ PHP作为模板语言 ”,因此短标签又回来了。我看不出有什么争论,您一生中将生产的大多数软件都将在您或贵公司控制的服务器上运行。只要您保持一致,就不会有任何问题。

更新

在使用长格式的Magento做了大量工作之后。结果,我改用以下形式:

<?php and <?php echo

过度

<? and <?=

似乎需要进行少量工作以确保互操作性。


8
我是自由职业者,我所有的代码都放在共享主机上,因此根本无法控制!:)
MDCore

12
如果您有足够的客户端移动到自己的coloc,则共享托管将是不安全且不稳定的。
杰克·麦格劳

2
Zend带回的短标签显然没有抓住,因为Zend使用的是长版本:framework.zend.com/manual/en/zend.view.scripts.html
Gerry

3
@Gerry我最近也读过这篇文章,请参见此线程的最新评论:更新.htaccess以启用短打开标签
MrWhite 2011年

2
您确实应该在UPDATE之后的第一句话中更正语法,以目前的形式来说这毫无意义。
redreinard

22

因为它会与XML声明产生混淆。很多人都同意 你,虽然。

另一个令人担忧的问题是,用短标签对所有内容进行编码只会在最后发现最终托管服务器将其关闭时会产生痛苦。


如果short_tags开启,XML声明不会引起混乱吗?
MDCore

因此,让PHP回显它,而不是直接输出XML声明。这不是一个很好的驳斥。
moo

这绝不是什么。这是唯一的实际原因,而这又是“托管者将其关闭”的另一个原因的原因,当然,如果您一如既往地知道自己在做什么,就可以使用它。
Vinko Vrsalovic

1
@macek:我知道。这只是我想到的第一个例子。另一个,如果您将PHP嵌入XML文件中怎么办?您不能直接这样做。而且也不要告诉我该问题的解决方案,我知道它们。关键是PHP有很多方法可以解析XML文件。您可以通过变通办法(<?='<?xml')或说“您不应该这样做” 来消除它们,但这并不能使它可能发生的事实消失。
Vinko Vrsalovic

1
如果短标签不起作用怎么办?它很容易做一个大块并替换<?=<? echo 。许多文本编辑器可以轻松地一次处理成千上万个文件。
Yamiko

20

以下是相同的精彩流程图:

使用<?=的决策树

资料来源:关于软件工程堆栈交换的类似问题


2
这是在描述是否使用简短回显标记,<?与问题中提到的简短标记不同(尽管它使用的是5.4之前的相同设置)
Alok 2013年

事实上,这应该是一个答案,每个人都可以理解,但情况并没有真正解释为什么你不希望使用在许多情况下,短标签(例如,不能够改变一个共享的主机系统的php.ini文件)
比约恩ķ

14

http://uk3.php.net/manual/zh-CN/language.basic-syntax.phpmode.php有很多建议,包括:

虽然有些人觉得短标签和ASP样式标签很方便,但它们的便携性较差,通常不建议这样做。

请注意,如果将PHP嵌入XML或XHTML中,则需要使用<?php ?>标记以保持符合标准。

在开发用于重新分发的应用程序或库或在不受您控制的PHP服务器上进行部署时,应避免使用短标签,因为目标服务器可能不支持短标签。对于可移植的可再发行代码,请确保不要使用短标签。



12
  • 短标签在某些Web服务器(共享主机等)中默认情况下不处于打开状态,因此,如果您需要移至其中之一,则代码可移植性成为一个问题。

  • 对于某些人来说,可读性可能是个问题。许多开发人员可能会发现,这<?php<?扫描文件时更引人注目,这是代码块开始的明显标记,尤其是当您坚持使用紧密交织的HTML和PHP 的代码库时。


2
短标签已在95%的Web服务器中启用。
Paolo Bergantino

19
我不赞成“可读性”论点。如果您使用PHP作为模板语言,<?= $var ?>那么它的可读性要比<?php echo $var ?>
Frank Farmer 2010年

2
@Paulo,此情况自'08以来可能已发生更改,但是默认情况下,带有yum安装和apt-get版本的PHP的EC2 Ubuntu和Fedora实例已禁用短标记
Doug Molineux

2
使用完整标签,您将获得100%:)
Elvis Ciotti 2012年

1
@FrankFarmer,我认为他是在比较没有回声的那一个。<?VS <?php
Pacerier,2015年


5

在寻找有关该主题的信息之后,我阅读了此页面,我觉得没有提到一个主要问题:懒惰与一致性。PHP的“真实”标签是<?php和?>。为什么?我不在乎 当这些显然适用于PHP时,为什么还要使用其他内容?<%和%>对我来说意味着ASP,而<script .....意味着Javascript(在大多数情况下)。因此,为了保持一致性,快速学习,可移植性和简单性,为什么不坚持标准?

另一方面,我同意模板中的短标签(仅模板中)似乎很有用,但是问题是我们在这里花了很多时间讨论它,实际上浪费了很长时间。这么多的时间键入“ php”的额外三个字符!

虽然有很多选择是不错的选择,但这完全不合逻辑,并且可能导致问题。试想一下,如果每种编程语言都允许4种或多种标签类型:Javascript可以是<JS或<script ....或<%或<?JS ....会有所帮助吗?在PHP的情况下,解析顺序倾向于允许允许这些事情,但是该语言在许多其他方面并不灵活:由于一点点不一致,它会引发通知或错误,但是经常使用短标签。而且,在不支持短标签的服务器上使用短标签时,由于在某些情况下不会给出错误,因此找出错误的位置可能会花费很长时间。

最后,我认为短标签不是这里的问题:PHP代码块只有两种逻辑类型-1)常规PHP代码,2)模板回显。对于前者,我坚信只允许<?php和?>来保持所有内容的一致性和可移植性。对于后者,<?= $ var?>方法很难看。为什么一定要这样?为什么不添加更合乎逻辑的东西?<?php $ var?>不会做任何事情(只有在最遥远的可能性下才可能与某些内容发生冲突),并且可以轻松地替换笨拙的<?=语法。或者,如果这是一个问题,也许他们可以使用<?php = $ var?>而不用担心不一致。

在打开和关闭标签有4个选项以及随机添加特殊“ echo”标签的时候,PHP可能在php.ini或.htaccess中也带有“自定义打开/关闭标签”标志。这样设计师可以选择自己最喜欢的一种。但是出于明显的原因,这太过分了。那么为什么要允许4个以上的选项呢?


4

当您使用具有单独视图文件的MVC框架或CMS时,最好使用它们。
它速度快,代码少,对于设计者而言不会造成混淆。只要确保您的服务器配置允许使用它们即可。


4

一种略有不同的情况是开发CodeIgniter时应用程序时。每当在模板/视图中使用PHP时,CodeIgniter似乎都使用短标签,否则对于模型和控制器,它始终使用长标签。在框架中这不是一个硬性规定,但是在大多数情况下,框架和许多其他用途的源代码都遵循此约定。

我的两分钱?如果您从未打算在其他地方运行代码,请根据需要使用它们。当我意识到这是一个愚蠢的主意时,我宁愿不必进行大量搜索和替换。



3

使用短标签的恕我直言的人经常忘记逃避他们正在回声的任何东西。最好有一个默认情况下转义的模板引擎。我相信Rob A编写了一个快速的技巧来逃脱Zend Frameworks应用程序中的短标签。如果您喜欢短标签,因为它使PHP易于阅读。那Smarty会是一个更好的选择吗?

{$myString|escape}

在我看来比

<?= htmlspecialchars($myString) ?> 

10
对于大多数PHP程序员来说,第二个选项比第一个选项更有意义,这仅仅是因为它是我们熟悉的实际PHP函数,而第一个选项是我们必须在PHP之上学习的伪模板代码。PHP已经是一种模板语言,像Smarty一样在其上添加另一种模板语言是多余的IMO。
错误磁体

3
Twig是默认情况下启用了HTML转义的模板引擎twig.sensiolabs.org
mateusza 2012年

3

必须问使用短标签的意义是什么。

打字更快

MDCore说:

<?= 比打字要方便得多 <?php echo

是的。您无需在整个脚本中键入7个字符* X次。

但是,当脚本花费一个小时或10个小时或更长时间来设计,开发和编写脚本时,在脚本持续时间内不在那里四处键入这7个字符的秒数与时间的相关性如何?

与某些核心(或全部)的脚本相比,如果短标签未打开或未打开,但更新或更改了ini文件/服务器配置的脚本使它们停止工作,则它们可能无法正常工作。

您获得的小收益并没有超过潜在问题的严重性,即您的站点无法正常工作,或者更糟的是,仅部分站点无法正常工作,因此很难解决。

更容易阅读

这取决于熟悉程度
我一直都在看和使用过<?php echo。因此虽然<?=不难阅读,但我并不熟悉,因此阅读起来也不容易

并且随着前端/后端开发人员的分裂(与大多数公司一样),从事那些模板工作的前端开发人员是否会更熟悉,知道<?=是否等同于“ PHP开放标签和回声”?
我要说的是,大多数人会更乐于接受逻辑。也就是说,一个清晰的PHP打开标记,然后发生“回声”-<?php echo

风险评估
问题=整个站点或核心脚本无法正常工作;

问题的可能性很低 +结果的严重性很高 = 高风险

结论

您在这里节省了几秒钟,而不必键入一些字符,但是为此要冒很大的风险,并因此可能会失去可读性。

前端或后端编码器熟悉<?=更容易理解<?php echo,因为他们是标准的PHP的东西-标准的<?php开放标签,非常著名的“回声”。
(即使前端编码人员也应该知道“ echo”,否则他们根本不会处理框架提供的任何代码)。

相反的可能性不大,但是从逻辑上讲,人们不太可能推断PHP short标签上的等号是“ echo”。


它与打字无关。它更短,因此有可能更容易阅读。用于阅读的人<?=会读到<?=不是用来读的人更容易 <?php echo阅读 <?php echo
Pacerier 2015年

@Pacerier Shorter并非简单=更易于阅读。我们都不同。你是什么意思是,它更容易阅读。正如我在回答中所说的那样,正如我经常<?php看到的那样,对我而言,遍历整个代码很多次要比<?=-熟悉使事情更容易- 不一定更好。
詹姆斯

不,我不是在比较您和我,我是说一个曾经阅读的人<?=<?=比一个曾经阅读<?php echo阅读的人好<?php echo。这意味着,如果我们有两个相同的人X副本,并且仅在一个方面用于阅读的方式进行更改,一个用于阅读<?=,另一个用于阅读<?php echo,则第一个副本可以x使用其所需的语法在阅读时获得的可读性值,而第二个副本y在阅读其所需语法时可达到的可读性值,其中x >= y
和平者

不,你错过了重点。我指的是系统的潜力,它与任何特定的人无关。您可以说习惯使用qwerty键盘打字的人使用qwerty打字的速度更快,而习惯使用dvorak打字的人使用dvorak打字的速度更快,但事实并没有改变这两个系统具有不同的潜力。
Pacerier,2015年

3

面对现实吧。没有短标签的PHP就像地狱一样丑陋。

.htaccess如果您无法进入,则可以在文件中启用它们php.ini

php_flag short_open_tag on

3
假。有时,服务器设置为拒绝任何形式的覆盖,先生。
2010年

17
是的,但是如果您的主机不允许您使用htaccess覆盖,则您确实需要一个新的主机!:)
Brian Lacy

1
在命令行界面上不起作用,并且一直不支持php_flag
Elvis Ciotti

3

为避免可移植性问题,请以开头的PHP标记,<?php如果您的PHP文件是纯PHP的(没有HTML),则无需使用结束标记。


2
  • 如果您确定服务器会支持它并且开发人员会理解它,则可以使用短标签。
  • 许多服务器不支持它,并且许多开发人员在看到它之后都会理解它。
  • 我使用完整标签来确保可移植性,因为它确实还不错。

话虽如此,我的一个朋友这么说是为了支持替代的标准化 asp样式标签,例如<%而不是<?,这是php.ini中称为asp_tags的设置。这是他的理由:

... 任意约定应该标准化。就是说,任何时候我们都面临着一系列具有同等价值的可能性-例如我们的编程语言应该使用什么样的怪异标点来标定自己-我们应该选择一种标准方式并坚持下去。这样,我们减少了所有语言(或约定涉及的所有事物)的学习曲线。

对我来说听起来不错,但我认为我们没人能绕过这个原因。同时,我会坚持全力以赴<?php


2

我认为值得一提的是,从PHP 7开始:

  • 简短的ASP PHP标签 <% … %>不见了
  • <? … ?>如果仍然可以使用简短的PHP选项卡short_open_tag设置为true,。这是默认值。
  • 从PHP 5.4开始,无论设置如何,都始终启用短打印标签。<?=… ?>short_open_tag

很好地摆脱了第一个语言,因为它干扰了其他语言。

现在,除了个人喜好以外,没有理由不使用简短的印刷标签。

当然,如果要编写与旧版本PHP 5兼容的代码,则需要遵循旧规则,但请记住,PHP 5.6之前的任何内容现在均不受支持。

参见:https : //secure.php.net/manual/en/language.basic-syntax.phptags.php


1
除非我弄错了,否则您的第一点是不正确的。该文档说,ASP标记,而不是简短的PHP标记,自PHP 7.0.0起已消失。
改革

@reformed你是绝对正确的。我将编辑我的答案。谢谢
Manngo '18

1

如果您关心XSS,则应该在<?= htmlspecialchars(…) ?>大多数时间使用它,因此,较短的标签并没有太大的区别。

即使你缩短echo htmlspecialchars()h(),这仍然是一个问题,您必须记住几乎每次都添加它(并尝试跟踪哪些数据是预先转义的,哪些是未转义的但无害的,只会使出错的可能性更大)。

我使用的模板引擎默认情况下是安全的,并<?php为我编写标签。


7
如果您发现自己键入“ <?php echo htmlspecialchars($ text,ENT_QUOTES,'UTF-8');?>每天执行500次,则可能要创建一个名为“ h”的快捷方式功能,如Rails一样。 ??= H($文本)>”扫描模板时就是这么更具可读性。
亚历山大Malfait

1
确实的确更好,但是使用模板引擎,可能只是$ {text}之类的(并且您不必记住添加h())
Kornel

7
PHP本身是一个模板引擎。当您停止使用短标签时,由于太冗长,它就不再是模板引擎。
约瑟夫·萨布(JosefSábl)2010年

1
@亚历山大·马尔法特(Alexander Malfait)这是个好建议。但是不需要<?=。您可以只使函数回显字符串而不是返回值,因此您将编写<?php h('hello')?>在进行i18n操作时我们是否已经这样做了?<?php _e('')?>还不错。
VladFr

1

<?php ?>更好地使用了,因为这种编程语言的开发人员已经大量更新了其核心语言。您可以看到短标签和长标签之间的区别。

短标签将以浅红色突出显示,而长标签将以深色突出显示!

但是,例如,回声一些<?=$variable;?>就可以了。但更喜欢较长的标签。<?php echo $variable;?>


1

<?(没有尾随空格)转换为<?php(带有尾随空格):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\?(?!php|=|xml|mso| )/<\?php /g'

<?(带有尾随空格)转换为<?php(保留尾随空格):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\? /<\?php /g'

1

短标记始终在php中可用。因此,您无需在脚本中回显第一条语句

例:

    $a =10;
    <?= $a;//10 
    echo "Hellow";//
    echo "Hellow";

   ?>

突然,您需要使用一个PHP脚本,然后您就可以使用它了。例:

<html>
<head>
<title></title>
</head>  
<body>
<p>hellow everybody<?= hi;?></p>
<p>hellow everybody  </p> 
<p>hellow everybody  </p>   
</body>
</html>

1

截至2019年,我不同意此处的某些答案。我建议使用长标签

<?php /* code goes here */ ?>

短回声标签

<?= /* code goes here */ ?>

原因:它们是PSR-1基本编码标准推荐的

<? /* code goes here */ ?>不建议使用其他短标签。

规格说明:

PHP代码必须使用long标记或short-echo标记;它一定不要使用其他标签的变化


1

php中有3个标签:

  1. 长格式标签,<?php ?>无需指示任何已​​配置
  2. <? ?> 如果启用了php.ini中的short_open_tag选项,则可以使用short_open_tag
  3. <?= 自php 5.4.0起缩短标签,它始终可用

从PHP 7.0.0 ASP和脚本标记被删除


那没有回答问题。
RalfFriedl

-5

不,PHP 6正在逐步淘汰它们因此,如果您喜欢代码的长寿性,那就不要使用它们或<% ... %>标记。


4
我看过其他博客文章说它们不会被弃用,只是ASP样式的短标签。
MDCore

22
根据PHP开发者会议的以下链接,看来这个答案是错误的:php.net/~derick/…– 2009
查尔斯

7
他们为什么这么糟糕,为什么呢?每个人都非常自信,以至于他们保持健康,但是没有人说为什么。
约瑟夫·萨布(JosefSábl)2009年

6
假。他们正在逐步淘汰<%%>标签,的确如此。他们只是为了混淆而没有其他目的。<??>标签不会受到影响;但是当然它们仍然可以基于每个服务器进行配置,并且您应该始终了解目标平台的要求。
Brian Lacy 2010年

6
此信息看似不正确且具有误导性,作者应予以纠正。
tex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.