Некоторое время я работаю над PHP
но сегодня, когда я это увидел, это стало для меня новым:
if(preg_match('/foo.*bar/','foo is a bar')): echo 'success '; echo 'foo comes before bar'; endif;
К моему удивлению, он также работает без ошибок. Может ли кто-нибудь просветить меня?
Спасибо всем 🙂
Этот стиль синтаксиса чаще используется при встраивании в 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> <? } ?>
Многословные концевые теги облегчают отслеживание вложенных блоков кода, хотя это по-прежнему в основном личные предпочтения.
Это альтернативный синтаксис PHP для структур управления .
Ваш фрагмент эквивалентен:
if(preg_match('/foo.*bar/','foo is a bar')) { echo 'success '; echo 'foo comes before bar'; }
В целом:
if(cond): ... ... endif;
такое же, как
if(cond) { ... ... }
http://php.net/manual/en/control-structures.alternative-syntax.php
Работает для if
, for
, while
, foreach
и switch
. Может быть весьма удобно для смешивания PHP и HTML.
Вы можете прочитать об этом в альтернативном синтаксисе для структур управления в руководстве по 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;
Это эквивалент:
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'; }
Мудрость поддержки нестандартного условного синтаксиса явно сомнительна.