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

Я работал над PHP в течение некоторого времени, но сегодня, когда я увидел это, это стало для меня новым:

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

endif;

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

Спасибо всем:)

Ответ 1

Этот стиль синтаксиса чаще используется при встраивании в HTML, особенно для логики шаблона/отображения. Когда это встроено таким образом, это немного легче читать, чем синтаксис фигурных фигурных скобок.

<div>
<? if ($condition): ?>
  <ul>
    <? foreach($foo as $bar): ?>
        <li><?= $bar ?></li>
    <? endforeach ?>
  </ul>
<? endif ?>
</div>

Versus:

<div>
<? if ($condition) { ?>
  <ul>
    <? foreach($foo as $bar) { ?>
      <li><?= $bar ?></li>
    <? } ?>
  </ul>
<? } ?>

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

Ответ 4

Вы можете прочитать об этом в Альтернативный синтаксис для структур управления в руководстве по 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;

Ответ 5

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

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

Мудрость поддержки нестандартного условного синтаксиса, несомненно, сомнительна.