何时使用if/endif而不是If{}?

12

这个问题已经很明确了。

在PHP中,我什么时候使用 if/endif 符号而不是标准的 if(某些条件){} 符号呢?

举个例子:

<?php if($a == 5): ?>
A is equal to 5
<?php endif; ?>

对比:

<?php if($a == 5){ ?>
A is equal to 5
<?php } ?>

我猜是用于模板设计,但感觉可能不对。 - Ascherer
4
我认为它是给VB程序员使用的... ;-) - Alnitak
6个回答

17

其他人已经给出了答案 "用于模板编写",但并没有真正解释为什么。花括号非常适合表示块,但它们有点依赖于缩进才能清晰地阅读。因此,这是相当清晰的:

<?php
if (1 == 2)
{
    while (1 < 2)
    {
        doSomething();
    }
}

很明显每个大括号都与其匹配的小括号是一致的。

但如果你要进入一个HTML块中,可能会使缩进变得不够整齐。例如:

<?php
if (1 != 2) { ?>
<div>This always happens! <?php while (true) { ?>
  <p>This is going to cause an infinite loop!</p>
<?php }
}

这很难理解。如果您使用endif风格,代码看起来会更加整洁:

<?php
if (1 != 2): ?>
<div>This always happens! <?php while (true): ?>
  <p>This is going to cause an infinite loop!</p>
<?php endwhile;
endif;

代码的内容更清楚地展示了正在进行的操作。对于这种有限的情况,它的可读性更高。


1
@lonesomeday,你在最后一个例子中如何嵌套使用 if 语句? - Naftali
如果(某事):做某事(); 如果(某事2):做某事2(); 否则:结束如果; 结束如果; - lonesomeday
我也不使用它,我基本上是在问如果我使用它,我应该吗?另外,在你的例子中你漏掉了else - Naftali
PHP是如何知道else语句对应的哪个if语句呢?在正则表达式中,我们使用括号进行匹配,但这里没有任何括号。 - Naftali
@Neal 它知道哪个 endif 是哪个:最近打开的尚未关闭的 if 块。 - lonesomeday
显示剩余3条评论

16

简短回答:

始终使用 if($something) { },几乎从不使用 if/endif。这是从PHP 4.0.0开始的标准语法,虽然旧语法不会消失,但这是每个人都期望的语法。

如果你真的想使用 if/endif 的话,那么可以在使用 PHP 作为模板语言时使用。

有些人喜欢像这样写:

<?php if ($foo): ?>
Hi There
<?php else: ?>
cya!
<?php endif; ?>
比...更好
<?php if ($foo) { ?>
Hi There
<?php } else { ?>
cya!
<?php } ?>

我认为原因在于每行代码都有它的"语音",特别是当PHP标签中间有大量HTML代码时,这种语音就变得尤为重要。


1
我认为这不是真的;if {} 本身并不是标准,只是在某些地方为了可读性而更受欢迎。例如,在一个模板中:<?php if ($var) { ?>yay!<?php } ?><?php if ($var): ?>yay!<?php endif; ?> 相比就显得非常丑陋。请注意,即使官方文档没有指出任何弃用或通知。 - Jimmy Sawczuk
@Jimmy,我试图表达的是旧语法不会消失,而且“旧语法并没有消失”。这不清楚吗?抱歉!我个人也同意你在模板语法选择方面的看法,但我听到其他人说他们不喜欢它,所以我不想在这里绝对地谈论。 - edorian
完全同意。我还要补充一点,如果您正确缩进代码,您就不会有问题来确定块的起始和结束位置。这样就否定了使用 endif 的主要原因之一... - ircmaxell

2

两种方法都是可接受的。一些人认为在模板中使用替代语法(endif)更易读。但在我看来,随着现代语法着色/高亮错误的出现,这种说法已经不再正确。只需要选择一个样式并坚持使用即可。


老问题,我知道。但我不得不在这里表示同意:有了语法着色甚至在花括号之间突出显示的行,花括号要好得多。我经常使用WooCommerce进行工作,并且我总是在模板中删除它们的endif标记。这样整体上会使生活更加轻松。 - InanisAtheos

1

在编写代码时,我通常使用if / endif来开始和结束php代码块,因此几乎总是在输出原始HTML时。

例如:

<?php if ($n == 3): ?>
Lorem ipsum.
<?php endif; ?>

在我看来,这比以下的代码更好:

<?php if ($n == 3) { ?>
Lorem ipsum.
<?php } ?>

1

这是一种风格选择。它们是类似的,没有一个比另一个更好。

前者在某些情况下可能很好,因为当深陷于 HTML 块集中时,阅读起来可能更容易。


1

你可以使用两种方式,但是首选的风格和目前已知的风格是标准的if(expr)


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