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

这两者之间有什么区别吗。

if ($value) {


}

还有..。

if ($value):


endif;

222846 次浏览

他们是相同的,但第二个是伟大的,如果你有 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; ?>

如果可能的话,我会使用第一个选项,不管新选项是什么。语法是标准的,大家都知道。它也是向后兼容的。

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

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

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

以下是可以在官方文档中找到它的地方: PHP: 控件结构的替代语法

两者都是一样的。

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

ZF 使用这种方法。

这两种语法在技术上没有区别。这种替代语法并不新鲜; 它至少在 PHP4时就得到了支持,甚至可能更早。

您可能更喜欢另一种形式,因为它显式地说明了哪种控制结构正在结束: 例如,endwhile只能终止 while块,而如果遇到大括号,则可能关闭任何内容。

但是,如果您使用的编辑器对其他类似 C 的语法中的大括号有特殊的支持,那么您可能更喜欢传统的语法。例如,Vim 支持多次击键,用于导航到匹配的大括号以及大括号分隔的块的起始和结束。可选的语法会破坏编辑器特性。

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

if($something){
$execute_something;
}

我过去常常使用花括号,但现在我更喜欢使用这种简单的替代语法,因为它具有代码可读性和可访问性。

它们在功能上确实是一样的。

但是如果 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>&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 像:

<?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、 forforeaches 视图脚本时,这一点会更加清晰:

<?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判断语句输入一个额外的关键字。