这是根据官方文档的信息:
可以在PHP中使用四对不同的开始和结束标记.其中两个,
并且
始终可用.另外两个是短标签和ASP样式标签,可以从php.ini配置文件打开和关闭.因此,虽然有些人发现短标签和ASP样式标签很方便,但它们的便携性较差,一般不推荐.
在我的经验,大多数服务器都启用短标记.打字
=
打字要方便得多
程序员的便利是一个重要因素,为什么不推荐他们?
1> Oli..:如果您不得不将代码移动到不受支持的服务器(并且您无法启用它),则不建议使用它们,因为它是PITA.正如你所说,许多共享主机确实支持短标签,但"批次"不是全部.如果要共享脚本,最好使用完整语法.
我同意
并且
=
比程序员更容易,
但只要你每次使用相同的表格(并且不要在空格中查看)(例如:
php
或=
),就可以进行批量查找和替换.我根本不把可读性作为理由.最认真的开发人员可以选择语法突出显示.
正如ThiefMaster在评论中提到的那样,从PHP 5.4开始
= ... ?>
,无论短标签设置如何,都支持标签.这应该意味着它们在可移植代码中使用是安全的,但这确实意味着它依赖于PHP 5.4+.如果你想支持5.4之前的版本并且不能保证短标签,你仍然需要使用.
此外,您需要知道从PHP 7中删除ASP标记<%,%>,<%=和脚本标记.因此,如果您想支持长期可移植代码并希望切换到最现代的工具,请考虑更改代码部分.
所以,解释是:它们很糟糕,因为它们不受支持?但为什么他们不受支持?因为它们不是规范的一部分?好的,但为什么他们不是规范的一部分?我对这个答案有点失望.
我不是在这里讨论"大问题",比如为什么我们在这里,它是如何开始的,等等.短标签支持不能保证在共享服务器上,并且它将被完全删除下一个主要版本.这就是你需要知道的全部.
短标签没有被淘汰.只有ASP风格的短标签.
在PHP 5.4的(非常接近)的未来,<?=的使用将与是否启用short_open_tags分开.<?=没有被逐步淘汰,恰恰相反,它现在被认为是该语言的一个基本部分.
强制性PHP*是*模板引擎.:P
@gcb,PHP _is_一个模板引擎
有些主机不支持mod_rewrite.还有一大堆其他选择.不要全部推荐它们.简单的HTML摇滚!
所以他们在屁股上是一个可怕的痛苦,但他们可以通过批量查找和替换删除?这是什么?
如果您需要短标签,则表示您需要使用模板引擎.
这是推荐禁用短标签的一个非常糟糕的理由.如果您有自己的专用服务器,那么您可以完全控制php.ini设置,因此您始终可以在服务器上启用短标签.至于关于切换主机提供商的争论,只需确保切换到在其服务器上提供短标签支持的主机提供商.我更喜欢在长标签上使用短标签,以保持编码的快速和高效,并提高代码的可读性.
在PHP试图"逐步淘汰"之前,他们从未成为我的PITA.我已经开发了大约8年的PHP并且在许多主机上.
@Oli:考虑一下,在答案开始时,从PHP 5.4开始,始终支持`<?=`(但不是`<?`).谷歌搜索*php短开标签*时,这个问题是#4,所以告诉人们这一点非常重要.
perl -pei"s/<?=/<?php echo /; s/<?/ <?php /;" $(查找模板)
抱歉,这只是一个借口,如果有这么多服务器不启用该选项使其默认.我希望他们会改变他们的想法,这不是关于是否可以避免使用短标签,而是关于如果他们被删除你会得到什么:我可以和他们一起生活或不生活,但为什么我必须做额外的工作,如果没有收获就受到限制?我希望他们将删除THE OPTION以启用/禁用它们并保持始终启用,例如已被删除的magic_quotes(最后在默认情况下已停用)
解决所有共享托管问题:不要使用糟糕的廉价共享主机.
如果您使用DBO准备好的语句,那么上面提到的全局搜索和替换实际上是危险的.假设您在名为list的表中检查基于年龄的行,并且意外地将空格放在问号之后而不是之前:$ dbh-> prepare("SELECT*FROM list WHERE age <?"); 全局搜索/替换会将其更改为$ dbh-> prepare("SELECT*FROM list WHERE age <?php"); 而且它也缺少全局标志,所以它每行只会替换一次.
2> Paolo Bergan..:我太喜欢
=$whatever?>
放手了.从来没有遇到过问题.我会等到它咬我的屁股.严肃地说,85%的(我的)客户在极少数情况下可以访问php.ini .其他15%使用主流托管服务提供商,几乎所有这些都启用了它们.我爱他们.
@B Seven如果你试图避免可能出现的每一个理论问题,那么你的代码几乎肯定会效率低下并且错误.直到PHP小组同意将短标签出来[不是ASP标签],被咬的担心要少得多,而且潜在的解决方案远比其他你可以花时间"修理"的东西简单得多.
如果它咬你,转移到更好的托管
我不同意不使用某些东西,因为它*可能*不受支持.我们是否应该使用服务器上可能不支持的任何其他功能?MYSQL与MYSQLI?你会一点一点地浪费你的时间,一次又一次地写长标签只是为了避免花一点时间换一个更好的主人.
3> dukeofgaming..:从PHP 5.4开始,回显快捷方式与短标记是一个单独的问题,因为始终会启用回显快捷方式.现在这是事实:
Rasmus Lerdorf的SVN修订版
邮件列表讨论
所以回声快捷键本身(
=
)现在可以安全使用.
我想这是唯一需要的"短标签".`<?php`可以在所有类文件的开头使用,然后你的视图有`<?=`.双赢.
`所以回声快捷键本身(<?=)可以安全使用......只要你觉得需要PHP 5.4就可以了.广泛分布的PHP应用程序(如wordpress)不需要5.4的奢侈品,甚至在2011年之前继续提供PHP 4支持 - 在PHP 5发布后整整7年.如果你在像facebook这样的地方,你的软件的所有安装都由公司自己直接操作,那么要求5.4支持比你正在开发像wordpress这样的项目要容易得多.
4> Brian Lacy..:整个讨论的问题在于使用PHP作为模板语言.没有人认为应该在应用程序源文件中使用标记.
然而,PHP的可嵌入语法允许它用作强大的模板语言,模板应该尽可能简单和可读.许多人发现使用像Smarty这样速度慢得多的附加模板引擎更容易,但对于那些要求快速渲染和纯代码库的纯粹主义者来说,PHP是编写模板的唯一方法.
禁止使用短标签的唯一有效参数是所有服务器都不支持它们.关于与XML文档冲突的评论是荒谬的,因为你可能不应该混合使用PHP和XML; 如果你是,你应该使用PHP来输出文本字符串.安全永远不应该是一个问题,因为如果你在模板文件中放入数据库访问凭证等敏感信息,那么,你就会遇到更大的问题!
现在,关于服务器支持的问题,诚然必须要知道他们的目标平台.如果共享主机可能是目标,则应避免使用短标签.但对于许多专业开发人员(例如我自己),客户承认(实际上,取决于事实)我们将决定服务器要求.我经常负责自己设置服务器.
我们永远不会与托管服务提供商合作,因为托管服务提供商不能完全控制服务器配置 - 在这种情况下,我们可以指望运行更多的麻烦,而不仅仅是失去短标签支持.它不会发生.
是的 - 我同意应该仔细权衡短标签的使用.但我也坚信它应该始终是一个选择,并且知道他的环境的开发者应该随意使用它们.
利用PHP作为一种快速,方便的模板语言的优势并不是一个"大失败".正如我之前所说,这是一个权衡利弊和编写代码的方式,以适应您选择的方法.不要仅仅因为它不适用于某个特定场景(可以轻松解决)而断然取消有效方法.
如果由于某种原因,你设置了apache来将.xml文件传递给mod_php,那么<?xml的东西会让短标签变得令人头疼.但这显然是一个奇怪的设置.
我并不是断然拒绝任何有效的方法(参见我对这个问题的回答.)你是那个断言在XML中解析PHP的人,我引用:"你不应该混淆PHP和XML".另外,我所指的最大的失败是决定使用`<?`作为短标记,因为它导致了XML的丑陋变通方法.也就是说,我同意这是权衡利弊的问题,如果你知道自己在做什么,你当然可以做到.但这并不能使"<?"成为一个不错的选择.
在某些类型的输出文档中无法在没有变通方法的情况下嵌入的**模板**语言是一个很大的失败.我不应该有PHP代码和短标签的XML模板的唯一原因是因为它不起作用,不是因为它没有意义.
我参加派对有点晚了,但我真的很喜欢这个答案,这反映了我对这种情况的体验.虽然我们在办公室对这个问题存在一些分歧,但我可以说,随着PHP的日常工作多年,我从未遇到过这个问题.当PHP用于生成XML时,根据我的经验,它始终处于高动态内容的环境中,而这些内容从未通过PHP直接模板化,因此问题永远不会出现.
5> Jake McGraw..:由于Zend Framework在其默认的MVC配置中推送" PHP作为模板语言 ",因此短标签正在回归.我不知道辩论是什么,你将在生命中产生的大部分软件将在你或你公司将控制的服务器上运行.只要你保持一致,就不应该有任何问题.
UPDATE
在与使用长形式的Magento做了很多工作之后.结果,我改用了以下的长形式:
过度
and =似乎只是为确保互操作性而进行的少量工作.
如果您有足够的客户移动到您自己的coloc,共享主机是不安全和不稳定的.
我自由职业者和我的所有代码都进入共享主机,所以根本没有控制权!:)
@Gerry我最近也看过这个,看到这个帖子的最后评论:[更新.htaccess启用短开标签](http://framework.zend.com/issues/browse/ZF-6343)
6> Vinko Vrsalo..:因为它可以用XML声明生成混淆.很多人都同意 与你,虽然.
另一个值得关注的问题是它使用短标签对所有内容进行编码所产生的痛苦只是为了找出最终托管服务器关闭它们的结果......
7> Sumoanand..:以下是相同的精彩流程图:
来源:关于软件工程堆栈交换的类似问题
这是描述是否使用短回声标记,与问题中提到的`<?`短标记不同(尽管它使用5.4之前的相同配置设置)
8> Oliver Charl..:http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php有很多建议,包括:
虽然有些人发现短标签和ASP风格标签很方便,但它们的便携性较差,一般不推荐.
和
请注意,如果要在PHP或XHTML中嵌入PHP,则需要使用
标记以保持符合标准.
和
在开发用于重新分发或在不受您控制的PHP服务器上部署的应用程序或库时,应避免使用短标记,因为目标服务器可能不支持短标记.对于便携式可再发行代码,请确保不要使用短标签.
9> James Alday..:如果有人仍然关注这个...从PHP 5.4.0到Alpha 1
=
始终可用:
http://php.net/releases/NEWS_5_4_0_alpha1.txt
所以看起来短标签是(a)可接受的,(b)这里留下来.至少现在......
从<5.4开始,`<?=`不被视为短标签
10> ConroyP..:
在某些Web服务器(共享主机等)中,默认情况下不会启用短标记,因此如果您需要移动到其中一个,则代码可移植性会成为问题.
对于某些人来说,可读性可能是个问题.许多开发人员可能会发现,
与
扫描文件时相比,它更容易成为代码块开头的一个标记,特别是如果您坚持使用HTML和PHP紧密交织的代码库.
我不买"可读性"的论点.如果你使用PHP作为模板语言,`<?= $ var?>`比`<?php echo $ var?>更可读.
95%的网络服务器都启用了短标签.
11> brunoais..:注意:从PHP 5.4开始,短标记
=
现在始终可用.
12> Daniel Ross..:我在寻找有关该主题的信息后阅读了本页,我觉得还没有提到一个主要问题:懒惰与一致性.PHP的"真实"标签是<?php和?>.为什么?我真的不在乎.当那些显然适用于PHP时,为什么还要使用其他东西?<%和%>对我来说意味着ASP,而
Tags | 热门标签RankList | 热门文章
- 1将xcarchive转换为IPA的错误 - 单束存档+缺少plist方法值
- 2你能在同一个web api控制器中使用不同参数类型的2个GET方法吗?
- 3无法读取以点分隔的整数
- 4Xcode错误"无法安装应用程序... [appname] .app需要[devicename]不支持的"z"功能
- 5删除链接不工作凤凰
- 6void*是否合法使用?
- 7为什么这个函数不返回一个可以使用ListToArray或ValueList的字符串?
- 8golang通过反射从接口获取结构
- 9Spring Boot RandomValuePropertySource嵌套属性
- 10是非常积极的
- 11在C++ 14 Standard中,它表示非constexpr函数不能用于constexpr函数的定义吗?
- 12在选定的选项卡上加载内容(基础)
- 13Schedulers.io()没有返回主线程
- 14PHP相对路径:我可以配置吗?
- 15具有相等参数类型的可变参数模板函数
- 16无法从Google官方网页获取Google Analytics配置文件
- 17只有CSS发生变化时,Gulp livereload会重新加载整个页面
- 18基于UIlabel行计数扩展tableviewcell
- 19使用Eclipse时,Maven编译失败并显示"找不到符号",它编译
- 20数组初始化需要括号括起的初始化列表lambda