......之间有什么不同吗
if ($value) {
}
Run Code Online (Sandbox Code Playgroud)
...和...
if ($value):
endif;
Run Code Online (Sandbox Code Playgroud)
?
Tho*_*aaf 169
它们是相同的,但如果你的代码中有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; ?>
Run Code Online (Sandbox Code Playgroud)
dpr*_*ite 67
我个人真的很讨厌替代语法.大括号的一个好处是大多数IDE,vim等都有支架突出显示.在我的文本编辑器中,我可以双击一个大括号,它将突出显示整个块,这样我就可以看到它的结束位置并且很容易开始.
我不知道哪个编辑器可以突出endif,endforeach等.
小智 45
我想这就说明了一切:
这种替代语法非常适合在混合使用它们的情况下提高易读性(适用于PHP和HTML!).
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
当混合HTML和PHP时,替代sytnax更容易阅读.在普通的PHP文档中,应该使用传统的语法.
gah*_*ooa 28
在我们公司,处理HTML的首选方法是:
<? if($condition) { ?>
HTML content here
<? } else { ?>
Other HTML content here
<? } ?>
Run Code Online (Sandbox Code Playgroud)
最后,它确实是一个选择并坚持下去的问题.
cre*_*gox 12
它们在功能上确实是相同的.
但是,如果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
Run Code Online (Sandbox Code Playgroud)
这实际上适用于任何类似的"关闭事物"!;)
此外,一般来说,编辑更好地处理大括号,从某种意义上说,它们可以指向它打开的位置.但即便如此,也不会使描述性评论变得不那么有效.
我认为当你在视图脚本中混合使用ifs,fors和foreaches 时,它会更加清晰:
<?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; ?>
Run Code Online (Sandbox Code Playgroud)
而不是:
<?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 } ?>
Run Code Online (Sandbox Code Playgroud)
这对于长控制语句尤其有用,在这些语句中,您可能无法从底部括号中看到顶部声明.
我认为这取决于你的个人编码风格.如果您习惯使用C++,Javascript等,使用{}语法可能会感觉更舒服.如果您习惯使用Visual Basic,则可能需要使用if:endif; 句法.
我不确定一个人可以明确地说一个人比另一个人更容易阅读 - 这是个人偏好.我通常做这样的事情:
<?php
if ($foo) { ?>
<p>Foo!</p><?php
} else { ?>
<p>Bar!</p><?php
} // if-else ($foo) ?>
Run Code Online (Sandbox Code Playgroud)
这是否更容易阅读:
<?php
if ($foo): ?>
<p>Foo!</p><?php
else: ?>
<p>Bar!</p><?php
endif; ?>
Run Code Online (Sandbox Code Playgroud)
是一个意见问题.我可以看到为什么有些人会觉得第二种方式更容易 - 但前提是你一直没有使用Javascript和C++进行编程.:)
两者都是一样的.
但是:如果你想在视图文件(MVC的V)中使用PHP作为模板语言,你可以使用这种替代语法来区分为实现业务逻辑而编写的php代码(MVC的控制器和模型部分)和gui逻辑.当然它不是强制性的,你可以使用你喜欢的语法.
ZF使用这种方法.
两种语法之间没有技术差异.替代语法不是新的; 它至少可以支持PHP 4,甚至可能更早.
您可能更喜欢替代形式,因为它明确说明哪个控制结构正在结束:endwhile例如,只能终止一个while块,而如果遇到一个大括号,它可能会关闭任何东西.
但是,您可能更喜欢传统的语法,如果您使用的编辑器对其他类C语法中的大括号有特殊支持.例如,Vim支持几个键击,用于导航到匹配的大括号以及大括号分隔的块的开头和结尾.替代语法会破坏该编辑器功能.
| 归档时间: |
|
| 查看次数: |
196657 次 |
| 最近记录: |