if(){}和if()之间的区别:endif;

ale*_*lex 152 php syntax

......之间有什么不同吗

if ($value) {

}
Run Code Online (Sandbox Code Playgroud)

...和...

if ($value):

endif;
Run Code Online (Sandbox Code Playgroud)

Tho*_*aaf 169

它们是相同的,但如果你的代码中有MVC并且不想在你的代码中有很多回声,那么第二个是很好的.例如,在我的.phtml文件(Zend Framework)中,我将编写如下内容:

<?php if($this->value): ?>
Hello
<?php elseif($this->asd): ?>
Your name is: <?= $this->name ?>
<?php else: ?>
You don't have a name.
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

  • @alex它也可以用大括号括起来,但至少我个人觉得这样的事情更加清晰.因为他们知道它是if的结束,而不是某种循环的结束或其他东西.认为你有结束和结束或类似的东西. (37认同)
  • 我不会使用<?=?>,因为并不是所有服务器都支持它,特别是那些不允许你更改php.ini的共享托管服务器. (10认同)
  • 不知道为什么这个答案是最高的,因为它不是一个很好的例子(你可以通过花括号实现完全相同). (8认同)
  • 为什么"如果你不想在你的代码中有很多回声,第二个是伟大的"?我认为传统的语法`{}`也是如此.不需要额外的回声`<?php if(...){?> ... <?php} else {?> ... <?php}?>`.与`<?php if(...):?> ... <?php else:?> ... <?php endif?>`有什么区别? (6认同)
  • 相关点是<?php endif; ?> - 即使在前面的if/else和this语句之间有许多HTML行,你也可以确切地知道结束了什么. (2认同)
  • 我在你的示例帮助中看到使用替代语法来减少回声的数量. (2认同)

dpr*_*ite 67

我个人真的很讨厌替代语法.大括号的一个好处是大多数IDE,vim等都有支架突出显示.在我的文本编辑器中,我可以双击一个大括号,它将突出显示整个块,这样我就可以看到它的结束位置并且很容易开始.

我不知道哪个编辑器可以突出endif,endforeach等.

  • 这应该在PHP模板中使用,其中块的开头和结尾由大块外语分隔.如果您的IDE能够很好地理解PHP以解析它,那么它也应该将`endif`突出显示为块尾.如果没有,你就不会通过使用`}来购买任何东西,因为它无论如何都不会匹配. (11认同)
  • Netbeans 7.x愉快地突出了匹配endforeach,endif等 (11认同)
  • 大多数ide(至少是我使用过的)只突出显示{} (2认同)

小智 45

我想这就说明了一切:

这种替代语法非常适合在混合使用它们的情况下提高易读性(适用于PHP和HTML!).

http://ca3.php.net/manual/en/control-structures.alternative-syntax.php

当混合HTML和PHP时,替代sytnax更容易阅读.在普通的PHP文档中,应该使用传统的语法.

  • +1,很好的回答它的目的是什么.我个人认为这对已经混乱的语言来说是毫无意义的补充. (6认同)

gah*_*ooa 28

在我们公司,处理HTML的首选方法是:

<? if($condition) { ?>
   HTML content here
<? } else { ?>
   Other HTML content here
<? } ?>
Run Code Online (Sandbox Code Playgroud)

最后,它确实是一个选择并坚持下去的问题.

  • @Oddthinking:他为我工作的公司假设? (5认同)

cre*_*gox 12

它们在功能上确实是相同的.

但是,如果endif距离记者太远,if我认为给它做一个引用评论是更好的做法.这样你就可以轻松找到它的开放位置.无论用什么语言:

if (my_horn_is_red or her_umbrella_is_yellow)
{

    // ...

    // let's pretend this is a lot of code in the middle

    foreach (day in week) {
        sing(a_different_song[day]);
    }

    // ...

} //if my_horn_is_red
Run Code Online (Sandbox Code Playgroud)

这实际上适用于任何类似的"关闭事物"!;)

此外,一般来说,编辑更好地处理大括号,从某种意义上说,它们可以指向它打开的位置.但即便如此,也不会使描述性评论变得不那么有效.


Jer*_*ten 11

您可以在官方文档中找到它:PHP:控制结构的替代语法


Har*_*air 9

我认为当你在视图脚本中混合使用ifs,fors和foreaches 时,它会更加清晰:

<?php if ( $this->hasIterable ): ?>
    <h2>Iterable</h2>
    <ul>
    <?php foreach ( $this->iterable as $key => $val ):?>
        <?php for ( $i = 0; $i <= $val; $i++ ): ?>
        <li><?php echo $key ?></li>
        <?php endfor; ?>
    <?php endforeach; ?>
    </ul>
<?php elseif ( $this->hasScalar ): ?>
    <h2>Scalar</h2>
    <?php for ( $i = 0; $i <= $this->scalar; $i++ ): ?>
    <p>Foo = Bar</p>
    <?php endfor; ?>
<?php else: ?>
    <h2>Other</h2>
    <?php if ( $this->otherVal === true ): ?>
    <p>Spam</p>
    <?php else: ?>  
    <p>Eggs</p>  
    <?php endif; ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

而不是:

<?php if ( $this->hasIterable ){ ?>
    <h2>Iterable</h2>
    <ul>
    <?php foreach ( $this->iterable as $key => $val ){?>
        <?php for ( $i = 0; $i <= $val; $i++ ){ ?>
        <li><?php echo $key ?></li>
        <?php } ?>
    <?php } ?>
    </ul>
<?php } elseif ( $this->hasScalar ){ ?>
    <h2>Scalar</h2>
    <?php for ( $i = 0; $i <= $this->scalar; $i++ ){ ?>
    <p>Foo = Bar</p>
    <?php } ?>
<?php } else { ?>
    <h2>Other</h2>
    <?php if ( $this->otherVal === true ){ ?>
    <p>Spam</p>
    <?php } else { ?>  
    <p>Eggs</p>  
    <?php } ?>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)

这对于长控制语句尤其有用,在这些语句中,您可能无法从底部括号中看到顶部声明.


liv*_*e75 7

我认为这取决于你的个人编码风格.如果您习惯使用C++,Javascript等,使用{}语法可能会感觉更舒服.如果您习惯使用Visual Basic,则可能需要使用if:endif; 句法.

我不确定一个人可以明确地说一个人比另一个人更容易阅读 - 这是个人偏好.我通常做这样的事情:

<?php
if ($foo) { ?>
   <p>Foo!</p><?php
} else { ?>
   <p>Bar!</p><?php
}  // if-else ($foo) ?>
Run Code Online (Sandbox Code Playgroud)

这是否更容易阅读:

<?php
if ($foo): ?>
   <p>Foo!</p><?php
else: ?>
   <p>Bar!</p><?php
endif; ?>
Run Code Online (Sandbox Code Playgroud)

是一个意见问题.我可以看到为什么有些人会觉得第二种方式更容易 - 但前提是你一直没有使用Javascript和C++进行编程.:)


Pau*_*ulo 5

如果可能的话,我会使用第一个选项,无论新选项如何.语法是标准的,每个人都知道.它也向后兼容.


Ita*_*vka 5

两者都是一样的.

但是:如果你想在视图文件(MVC的V)中使用PHP作为模板语言,你可以使用这种替代语法来区分为实现业务逻辑而编写的php代码(MVC的控制器和模型部分)和gui逻辑.当然它不是强制性的,你可以使用你喜欢的语法.

ZF使用这种方法.


Rob*_*edy 5

两种语法之间没有技术差异.替代语法不是新的; 它至少可以支持PHP 4,甚至可能更早.

您可能更喜欢替代形式,因为它明确说明哪个控制结构正在结束:endwhile例如,只能终止一个while块,而如果遇到一个大括号,它可能会关闭任何东西.

但是,您可能更喜欢传统的语法,如果您使用的编辑器对其他类C语法中的大括号有特殊支持.例如,Vim支持几个键击,用于导航到匹配的大括号以及大括号分隔的块的开头和结尾.替代语法会破坏该编辑器功能.