PHP中的大括号或冒号-endif语句 - 哪个提供更好的性能和代码兼容性?

20

我查看了很多代码片段,发现人们可以在if语句中使用以下两种方法:

方法1:

<?php
  if ($condition) {
    // Do this
  }
?>

方法 2:

<?php
  if ($condition):
    // Do this
  endif;
?>

哪种方法更兼容PHP编译器和不同版本的PHP,还是两者之间没有明显的区别?


4
抛硬币,这是个人的选择。 - user557846
3
我觉得 #1 更方便,因为它更接近 JavaScript 的语法,而我通常会混用这两种语言。 - user34411
我在编程中倾向于同时使用两者,这并不会给我带来麻烦,因为我有效地缩进我的代码,使我能够看到代码的分割。 - user1063295
在我看来,endif; 语法更冗长(即易于区分不同的 end-something,而不是花括号之间),同时避免了花括号样式的争论(即是否将开放花括号放在新行上),确保一致的格式。 - Kotauskas
5个回答

27

大多数情况下,视图脚本中使用替代语法(endif)。由于花括号只占用一个字符,因此很难看到/注意到if语句的结尾,当您在文件底部时,很难判断它是if语句的结尾还是foreach语句的结尾。例如:

<?php if ($condition): ?>

    <div>a huge block of html</div>

<?php endif; ?>

11
虽然我不会因为没有完整的集成开发环境而批评任何人,但确实有几个支持代码折叠(和块识别)的编辑器是免费提供的。 - Ignacio Vazquez-Abrams
8
如果你的函数太长以至于无法将结束大括号与起始大括号匹配,那么使用大括号或替代语法就是最不重要的问题。 - Mark Kaplun

7
他们两个完全等价。请参考您组织的样式指南来确定应该使用哪一个。

是的,但我觉得其中一个可能不太兼容或速度较慢。显然,我可能是错的。 - Lucas
7
如果你正在运行一个不支持“替代”语法的 PHP 版本,那么你面临的问题比必须转换你的代码更加棘手。 - Ignacio Vazquez-Abrams

4
这个替代语法与更为熟悉的语法并没有任何不同,但请不要混用两种语法。类似的语法也存在于whileforforeachswitch中。
通常,您应基于易读性和团队偏好选择首选语法。
真正可能会让您困惑的是当您开始看到误用逻辑连词运算符的“if语句”,例如以下内容:
isset( $value ) AND print( $value );

0

就我目前所见,在我的应用程序中,它们之间没有区别,但是如果你在没有规则的情况下混合使用它们,可能会遇到很多问题,因为可能会出现一些错误,而你却没有使用正确的语法。

选择一种语法并且专注使用它。


内容不足以作为答案,但可以作为评论。 - Arpit Solanki
他没有足够的积分来评论。So的规则很奇怪 :) - Hibbem

0
唯一的区别在于非常大的文档和项目中才能看到。我们公司使用大括号而不是endif、endelse等,因为我们处理非常大的项目。当您比较文件大小时,使用大括号会有好处。较小的文件加载速度更快,因此我们努力减少每个字节。我们注释掉结束大括号以便在测试中更容易识别,然后在生产中删除所有注释。

单个 PHP 文件的大小有多大?几 MB 吗?文件加载时,PHP 文件的大小不会产生任何影响,因为它只需要微秒级别的时间。相反,我认为如果您正在处理大文件,则更容易使用冒号关键字来识别在大型嵌套逻辑中关闭的条件或循环。 - Saurin Dashadia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接