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> <?php else: ?> <a href="<?php echo $this->getModeUrl($_code) ?>" title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></a> <?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个字符。 使用大括号,您只需键入两个字符,但对于基于关键字的语法,您必须为每个循环和条件语句键入一个完整的额外关键字。