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

有什么区别…

if ($value) { } 

…和…

 if ($value): endif; 

他们是一样的,但第二个是伟大的,如果你有你的代码中的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; ?> 

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

我不知道有哪位编辑能突出显示endif,endforeach等

我觉得这一切都说:

这种替代语法对于提高易读性(对于PHP和HTML!)而言是非常好的,在这种情况下,您可以混合使用它们。

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

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

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

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

最后,这是一个select和坚持的问题。

以下是您可以在官方文档中find的地方: PHP:控制结构的替代语法

它们在function上确实是一样的。

但是, if我认为最好的做法是给它提供参考意见,那么endif离记者太远了。 只是这样你可以很容易地find它开放的地方。 不pipe它是什么语言:

 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 

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

另外,一般来说,编辑会更好地处理花括号,从某种意义上说,他们可以指出你的位置。 但即使这样也不会使描述性评论变得不那么有效。

我认为这取决于你的个人编码风格。 如果您习惯于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 ++编程。 🙂

我认为,当你在查看脚本中使用if s的混合时,它更加清晰。

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

这对于长时间的控制语句尤为有用,您可能无法从底部大括号中看到顶部的声明。

如果可能的话,我将使用第一个选项,而不考虑新的选项。 语法是标准的,每个人都知道。 它也是向后兼容的。

两者都是一样的。

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

采埃孚利用这种方法。

这两种语法没有技术上的区别。 替代语法不是新的; 它至less早在PHP 4,甚至更早的时候就被支持。

您可能更喜欢另一种forms,因为它明确指出哪个控制结构正在结束:例如,最后只能终止一个while块,而如果遇到大括号,则可能会closures任何东西。

不过,如果您使用的编辑器对其他类C语法中的花括号有特别的支持,您可能更喜欢传统的语法。 例如,Vim支持导航到匹配大括号的几个按键,以及大括号分隔的块的开始和结束。 另一种语法会破坏该编辑器function。

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

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

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

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

我曾经使用花括号,但现在我宁愿使用这个短的替代语法,因为代码的可读性和可访问性。

最后,你只是不想在寻找下面的行,然后不得不猜测它开始的地方:

 <?php } ?> 

技术上和function上都是一样的。

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

 if($something){ $execute_something; } 

我曾经使用花括号“if,else”的条件。 但是,我发现“if(xxx):endif;” 如果代码被大量封装并且更容易在任何编辑器中阅读,则语义更具语义。

当然,当大括号被选中时,许多编辑者能够识别和突出显示大块的代码。 有些在“if(xxx):endif”对(如NetBeans)

就个人而言,我会推荐“if(xxx):endif”,但对于小的条件检查(例如,只有一行代码),没有太大的区别。

我个人更喜欢在两个单独的部分,但在同一个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; ?> 

但也许这是慢的?

我觉得以前的答案没有一个在这里完全确定答案,所以我要阐明自己的观点。 在function上,这两种方法是一样的。 如果程序员熟悉C语言之后的其他语言,那么他们可能会对大括号感到更自在,否则,如果php是他们学习的第一语言,那么他们会对if语句更加熟悉,因为它似乎更接近一般的语言。

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

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

相比

 if(/*condition*/): /*body*/ endif; 

其他循环尤其如此,比如说,你最终会input一个额外的10个字符。 使用大括号,您只需键入两个字符,但对于基于关键字的语法,您必须为每个循环和条件语句键入一个完整的额外关键字。