Странный синтаксис PHP

Я продолжал работать PHP в течение некоторого времени, но сегодня когда я видел это, это стало плохо мне знакомым:

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

endif;

К моему удивлению это также работает без ошибки. Кто-либо может просветить меня?

Благодаря всем :)

10
задан codaddict 10 September 2010 в 06:55
поделиться

5 ответов

Этот стиль синтаксиса чаще используется при встраивании в 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>
<? } ?>

Подробные конечные теги немного упрощают отслеживание вложенных блоков кода, хотя это все еще в основном личное предпочтение.

14
ответ дан 3 December 2019 в 13:27
поделиться

Вы можете прочитать об этом в Альтернативный синтаксис для управляющих структур в руководстве по 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;
1
ответ дан 3 December 2019 в 13:27
поделиться

Это эквивалент:

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

Разумность поддержки нестандартного условного синтаксиса явно сомнительна.

0
ответ дан 3 December 2019 в 13:27
поделиться

Это Альтернативный синтаксис PHP для управляющих структур.

Ваш фрагмент эквивалентен:

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

В общем случае:

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

то же самое, что

if(cond) {
...
...
}
28
ответ дан 3 December 2019 в 13:27
поделиться

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

Works for if, for, while, foreach, and switch. Может быть весьма удобен для смешивания PHP и HTML.

5
ответ дан 3 December 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: