10

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

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

endif;

令我惊讶的是,它也可以毫无错误地运行。任何人都可以启发我吗?

谢谢大家 :)

4

5 回答 5

28

这是 PHP控制结构的替代语法

您的代码段相当于:

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

一般来说:

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

if(cond) {
...
...
}
于 2010-05-07T13:33:13.677 回答
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>
<? } ?>

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

于 2010-05-07T13:45:53.027 回答
5

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

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

于 2010-05-07T13:33:31.507 回答
1

您可以在 PHP 手册中的控制结构的替代语法中阅读它。重新格式化后,您发布的代码如下所示:

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;
于 2010-05-07T13:38:27.317 回答
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';
}

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

于 2010-05-07T13:41:23.927 回答