......之间有什么不同吗?
if ($value) {
}
...和...
if ($value):
endif;
答案 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)
我认为,当您在视图脚本中混合使用if
,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 } ?>
这对于长控制语句尤其有用,在这些语句中,您可能无法从底部括号中看到顶部声明。
答案 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>
<?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; ?>
答案 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个字符。使用大括号,您只需键入两个字符,但对于基于关键字的语法,您必须为每个循环和条件语句键入一个完整的额外关键字。