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

时间:2009-02-19 06:11:12

标签: php syntax

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

if ($value) {

}

...和...

if ($value):

endif;

18 个答案:

答案 0 :(得分:166)

它们是相同的,但如果你的代码中有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; ?>

答案 1 :(得分:66)

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

我不知道哪一个编辑器可以突出显示endif,endforeach等。

答案 2 :(得分:44)

我认为这就说明了一切:

  

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

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

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

答案 3 :(得分:28)

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

<? if($condition) { ?>
   HTML content here
<? } else { ?>
   Other HTML content here
<? } ?>

最后,这真的是选择一个并坚持下去。

答案 4 :(得分:10)

您可以在官方文档中找到它:PHP: Alternative syntax for control structures

答案 5 :(得分:10)

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

但如果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

这实际上适用于任何类似的“结束事物”! ;)

此外,一般来说,编辑人员更好地处理大括号,从某种意义上说,他们可以指出它在哪里打开。但即便如此,也不会使描述性评论的效力降低。

答案 6 :(得分:7)

我认为,当您在视图脚本中混合使用ifforforeach时,它会更加清晰:

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

而不是:

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

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

答案 7 :(得分:7)

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

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

<?php
if ($foo) { ?>
   <p>Foo!</p><?php
} else { ?>
   <p>Bar!</p><?php
}  // if-else ($foo) ?>

这是否比阅读更容易阅读:

<?php
if ($foo): ?>
   <p>Foo!</p><?php
else: ?>
   <p>Bar!</p><?php
endif; ?>

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

答案 8 :(得分:5)

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

答案 9 :(得分:5)

两者都是一样的。

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

ZF使用这种方法。

答案 10 :(得分:5)

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

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

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

答案 11 :(得分:3)

这一切都取决于,我个人更喜欢带有回声和大量缩进的传统语法,因为它更容易阅读。

<?php
    if($something){
        doThis();
    }else{
        echo '<h1>Title</h1>
            <p>This is a paragraph</p>
            <p>and another paragraph</p>';
    }
?>

我同意alt语法对于不同的结尾子句更清晰,但我真的很难在没有文本编辑器突出显示的帮助下处理它们,而我只是不习惯看到像这样的“压缩”代码:< / p>

<?php if( $this->isEnabledViewSwitcher() ): ?>
<p class="view-mode">
    <?php $_modes = $this->getModes(); ?>
    <?php if($_modes && count($_modes)>1): ?>
    <label><?php echo $this->__('View as') ?>:</label>
    <?php foreach ($this->getModes() as $_code=>$_label): ?>
        <?php if($this->isModeActive($_code)): ?>
            <strong title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></strong>&nbsp;
        <?php else: ?>
            <a href="<?php echo $this->getModeUrl($_code) ?>" title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></a>&nbsp;
        <?php endif; ?>
    <?php endforeach; ?>
    <?php endif; ?>
</p>
<?php endif; ?>

答案 12 :(得分:2)

我曾经使用大括号,但现在我喜欢使用这种简短的替代语法,因为代码可读性和可访问性。

答案 13 :(得分:2)

最后,您只是不想寻找以下行,然后不得不猜测它的起始位置:

<?php } ?>

技术上和功能上都是一样的。

答案 14 :(得分:1)

就我个人而言,我更喜欢在两个单独的部分中制作它,但在同一个PHP中:

<?php 
    if (question1) { $variable_1 = somehtml; }
    else { $variable_1 = someotherhtml; } 

    if (question2) {
        $variable_2 = somehtml2;
    }

    else { 
        $variable_2 = someotherhtml2;
    }         

etc.
$output=<<<HERE
htmlhtmlhtml$variable1htmlhtmlhtml$varianble2htmletcetcetc
HERE;
echo $output;

?>

但也许它更慢?

答案 15 :(得分:1)

我曾经使用大括号表示“if,else”条件。但是,我发现“if(xxx):endif;”如果代码包含得很多,并且在任何编辑器中都更容易阅读,那么语义就会更加语义化。

当然,当选择花括号时,许多编辑器能够识别和突出显示代码块。有些也在“if(xxx):endif”对(例如,NetBeans)

上做得很好

就个人而言,我建议“if(xxx):endif”,但对于小条件检查(例如,只有一行代码),没有太大差异。

答案 16 :(得分:1)

我认为这是一个偏好问题。我个人使用:

if($something){
       $execute_something;
}

答案 17 :(得分:0)

我觉得现有的答案都没有完全确定答案,所以我要阐明自己的观点。从功能上讲,这两种方法是相同的。如果程序员熟悉C语法之后的其他语言,那么他们可能会对括号感觉更舒服,否则如果php是他们正在学习的第一种语言,他们会对if {感觉更舒服{1}}语法,因为它似乎更接近常规语言。

如果你是一个非常认真的程序员并且需要快速完成任务,那么我相信大括号语法是优越的,因为它节省了打字时间

endif

相比
if(/*condition*/){
    /*body*/ 
}

对于其他循环尤其如此,例如,if(/*condition*/): /*body*/ endif; ,您最终会输入额外的10个字符。使用大括号,您只需键入两个字符,但对于基于关键字的语法,您必须为每个循环和条件语句键入一个完整的额外关键字。