我在使用 PHP
已经有一段时间了,但今天当我看到这个时,它对我来说是新的:
if(preg_match('/foo.*bar/','foo is a bar')):
echo 'success ';
echo 'foo comes before bar';
endif;
出乎意料,它也能毫无错误地运行。有人可以给我解释一下吗?
感谢大家:)
我在使用 PHP
已经有一段时间了,但今天当我看到这个时,它对我来说是新的:
if(preg_match('/foo.*bar/','foo is a bar')):
echo 'success ';
echo 'foo comes before bar';
endif;
出乎意料,它也能毫无错误地运行。有人可以给我解释一下吗?
感谢大家:)
这是PHP的控制结构的替代语法。
你的代码片段等同于:
if(preg_match('/foo.*bar/','foo is a bar')) {
echo 'success ';
echo 'foo comes before bar';
}
if(cond):
...
...
endif;
是相同的
if(cond) {
...
...
}
这种语法风格在嵌入HTML时更常用,尤其是在模板/显示逻辑方面。以这种方式嵌入时,比花括号语法更容易阅读。
<div>
<? if ($condition): ?>
<ul>
<? foreach($foo as $bar): ?>
<li><?= $bar ?></li>
<? endforeach ?>
</ul>
<? endif ?>
</div>
对比:
<div>
<? if ($condition) { ?>
<ul>
<? foreach($foo as $bar) { ?>
<li><?= $bar ?></li>
<? } ?>
</ul>
<? } ?>
冗长的结束标签使得跟踪嵌套代码块变得稍微容易一些,尽管这还是大部分取决于个人喜好。
http://php.net/manual/zh/control-structures.alternative-syntax.php
这种语法适用于if
、for
、while
、foreach
和switch
。对于混合使用PHP和HTML非常方便。
if (preg_match('/foo.*bar/','foo is a bar')):
echo 'success ';
echo 'foo comes before bar';
endif;
这段代码相当于:
if (preg_match('/foo.*bar/','foo is a bar')) {
echo 'success ';
echo 'foo comes before bar';
}
这种语法也适用于其他几个控制结构。
if ( condition ):
// your if code
elseif ( other_condition ):
// optional elseif code
else:
// optional else code
endif;
while ( condition ):
// your while code
endwhile;
for ( condition ):
// your for code
endfor;
foreach ( condition ):
// your foreach code
endforeach;
switch ( condition ):
// your switch code
endswitch;
这相当于:
if(preg_match('/foo.*bar/','foo is a bar')):
echo 'success ';
echo 'foo comes before bar';
endif;
这相当于:
if(preg_match('/foo.*bar/','foo is a bar')){
echo 'success ';
echo 'foo comes before bar';
}
支持非标准条件语法的智慧显然是值得质疑的。