这两者之间有什么区别吗。
if ($value) { }
还有..。
if ($value): endif;
?
他们是相同的,但第二个是伟大的,如果你有 MVC 在你的代码,不希望有很多回声在你的代码。例如,在我的 .phtml文件(Zend Framework)中,我将写下如下内容:
.phtml
<?php if($this->value): ?> Hello <?php elseif($this->asd): ?> Your name is: <?= $this->name ?> <?php else: ?> You don't have a name. <?php endif; ?>
如果可能的话,我会使用第一个选项,不管新选项是什么。语法是标准的,大家都知道。它也是向后兼容的。
在我们公司,处理 HTML 的首选方法是:
<? if($condition) { ?> HTML content here <? } else { ?> Other HTML content here <? } ?>
最后,真正的问题是选择一个并坚持下去。
以下是可以在官方文档中找到它的地方: PHP: 控件结构的替代语法
两者都是一样的。
但是: 如果你想在视图文件中使用 PHP 作为模板语言(MVC 的 V) ,你可以使用这个替代语法来区分为实现业务逻辑(MVC 的控制器和模型部分)和 gui 逻辑编写的 PHP 代码。 当然,它不是强制性的,您可以使用任何您喜欢的语法。
ZF 使用这种方法。
这两种语法在技术上没有区别。这种替代语法并不新鲜; 它至少在 PHP4时就得到了支持,甚至可能更早。
您可能更喜欢另一种形式,因为它显式地说明了哪种控制结构正在结束: 例如,endwhile只能终止 while块,而如果遇到大括号,则可能关闭任何内容。
endwhile
while
但是,如果您使用的编辑器对其他类似 C 的语法中的大括号有特殊的支持,那么您可能更喜欢传统的语法。例如,Vim 支持多次击键,用于导航到匹配的大括号以及大括号分隔的块的起始和结束。可选的语法会破坏编辑器特性。
我认为这是一个偏好的问题,我个人使用:
if($something){ $execute_something; }
我过去常常使用花括号,但现在我更喜欢使用这种简单的替代语法,因为它具有代码可读性和可访问性。
它们在功能上确实是一样的。
但是如果 endif离记者 if太远了,我认为给它一个参考评论是更好的做法。这样你就能很容易地找到它打开的地方。不管是什么语言:
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
这实际上适用于任何类似的“结案陈词”! ;)
另外,一般来说,编辑器能更好地处理花括号,在某种意义上,他们可以指出您的位置是打开的。但即便如此,这些描述性的注释也不会因此失效。
最后,你只是不希望看到下面的行,然后不得不猜测它从哪里开始:
<?php } ?>
技术上和功能上是一样的。
这完全取决于个人,我更喜欢带有 echo 和大量缩进的传统语法,因为它更容易阅读。
<?php if($something){ doThis(); }else{ echo '<h1>Title</h1> <p>This is a paragraph</p> <p>and another paragraph</p>'; } ?>
我同意 alt 语法对于不同的结尾子句来说更简洁,但是如果没有文本编辑器的高亮显示帮助,我真的很难处理它们,我只是不习惯看到这样的“压缩”代码:
<?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 像:
<?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; ?>
但也许它更慢?
我认为这真的取决于你个人的编码风格。 如果您已经习惯了 C + + 、 Javascript 等,那么使用{}语法可能会让您感觉更舒服。 如果您习惯于使用 VisualBasic,那么可能需要使用 If: endf; 语法。
我不确定一个人是否能明确地说出一个人比另一个人更容易阅读——这是个人偏好。我通常这样做:
<?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,else”条件,我过去常常使用花括号。但是,我发现,如果代码被严重包装,并且在任何编辑器中都更容易阅读,那么“ if (xxx) : endf;”就更具语义性。
当然,当选择大括号时,许多编辑器能够识别和突出显示代码块。有些在“ if (xxx) : endf”对(例如 NetBeans)上也做得很好
就我个人而言,我建议使用“ if (xxx) : endf”,但是对于较小的条件检查(例如,只有一行代码) ,它们之间没有太大区别。
我认为当你混合使用 ifs、 for和 foreaches 视图脚本时,这一点会更加清晰:
for
foreach
<?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 } ?>
这对于长控制语句特别有用,因为您可能无法从底部大括号中看到 top 声明。
我觉得没有一个已有的答案能够完全确定这个问题的答案,所以我将阐述我自己的观点。在功能上,这两个方法是相同的。如果程序员熟悉其他遵循 C 语法的语言,那么他们可能会对大括号感到更舒服,或者如果 php 是他们正在学习的第一种语言,他们会对 if endif语法感到更舒服,因为它似乎更接近于常规语言。
如果您是一个非常认真的程序员,并且需要快速完成任务,那么我确实认为花括号语法更好,因为它节省了输入时间
if(/*condition*/){ /*body*/ }
相比之下
if(/*condition*/): /*body*/ endif;
对于其他循环来说尤其如此,比如 foreach,在这种循环中,您最终会额外输入10个字符。对于大括号,你只需要输入两个字符,但是对于基于关键字的语法,你必须为每个循环和 If判断语句输入一个额外的关键字。