奇怪的PHP语法

时间:2010-05-07 13:31:36

标签: php syntax if-statement alternate control-structure

我已经在PHP工作了一段时间,但今天当我看到它时,它对我来说是新的:

if(preg_match('/foo.*bar/','foo is a bar')):
        echo 'success ';
        echo 'foo comes before bar';

endif;

令我惊讶的是它也运行没有错误。谁能开导我?

感谢所有人:)

5 个答案:

答案 0 :(得分:28)

这是PHP的Alternative syntax for control structures

您的代码段相当于:

if(preg_match('/foo.*bar/','foo is a bar')) {
        echo 'success ';
        echo 'foo comes before bar';
}

一般来说:

if(cond):
...
...
endif;

相同
if(cond) {
...
...
}

答案 1 :(得分:14)

在嵌入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>
<? } ?>

详细的结束标记使得跟踪嵌套代码块变得容易一些,尽管它仍然主要是个人偏好。

答案 2 :(得分:5)

http://php.net/manual/en/control-structures.alternative-syntax.php

适用于ifforwhileforeachswitch。混合PHP和HTML非常方便。

答案 3 :(得分:1)

您可以在PHP手册的Alternative syntax for control structures中阅读相关内容。重新格式化,您发布的代码如下所示:

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;

答案 4 :(得分:0)

相当于:

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';
}

支持非标准条件语法的智慧显然是值得怀疑的。