【问题标题】:When do I use if/endif versus If{}?何时使用 if/endif 与 If{}?
【发布时间】:2011-05-17 05:53:03
【问题描述】:

这个问题不言自明。

在 PHP 中,我什么时候使用 if/endif 表示法而不是标准的 if(something){} 表示法?

例子:

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

对比:

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

【问题讨论】:

  • 我会猜测模板,但我觉得我错了
  • 我以为是给 VB 程序员的... ;-)

标签: php if-statement


【解决方案1】:

其他人给出了“模板”的答案,但没有真正解释原因。花括号非常适合表示块,但它们有点依赖缩进才能清楚地阅读。所以这很清楚:

<?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;

代码的内容更清楚地显示了正在做什么。对于这种有限的情况,它更清晰。

【讨论】:

  • @lonesomeday,在最后一个示例中,您如何嵌套if
  • if(something){do something if(something2){//do something2}else {}} 如何使用较短的符号来做到这一点?
  • if(something): doSomething(); if (something2): doSomething2(); else: endif; endif; 这不是很好,我同意。我,like Edorian 基本上从不使用这种语法。
  • 我也不使用它,我基本上是在问我是否会,如果我,你在你的例子中也漏掉了else
  • php如何知道ifelse指的是哪个? reg sytax 有括号,但这里什么都没有。
【解决方案2】:

简答:

总是使用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 时,这会很有帮助。

【讨论】:

  • 我不认为这是真的;并不是说if {} 本身就是一个标准,只是它在某些地方更适合可读性。例如,在模板中:&lt;?php if ($var) { ?&gt;yay!&lt;?php } ?&gt;&lt;?php if ($var): ?&gt;yay!&lt;?php endif; ?&gt; 相比简直丑陋。请注意,official documentation 甚至没有注意到任何弃用或通知。
  • @Jimmy 我试图说旧语法不会随着“而旧语法不会消失”而消失。那不是很清楚吗?对不起!我个人同意你在模板中的语法选择,但我从其他人那里听说他们不喜欢它,所以我不想在这里谈论绝对
  • 同意 100%。我还要补充一点,如果你正确地缩进你的代码,你应该永远不会有问题告诉块从哪里开始和结束。因此,这否定了使用 endif... 的主要原因之一
【解决方案3】:

这两种方法都可以接受。有些人认为替代语法(endif)在模板中更清晰。恕我直言,具有现代语法着色/突出显示错误,不再适用。只需选择一种风格并坚持下去。

【讨论】:

  • 老问题,我知道。但我不得不同意:通过语法着色,甚至在花括号之间突出显示线条,花括号更胜一筹。我在 WooCommerce 上做了很多工作,我总是在模板中删除它们的 endif 符号。它只是让整体生活更轻松。
【解决方案4】:

这是一种风格选择。它们是相似的,一个并不比另一个好。

前者在某些情况下可能很好,因为当它陷入 HTML 块集的中间时可能更容易阅读。

【讨论】:

    【解决方案5】:

    我主要在停止和启动 php 代码块时使用 if/endif,所以几乎总是在输出原始 html 时使用。

    例如:

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

    至少在我看来,这看起来比以下更好:

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

    【讨论】:

      【解决方案6】:

      您可以同时使用两者,但首选样式和当前已知样式是标准if(expr)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 2014-10-04
        • 2011-09-26
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多