Я продолжал работать 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';
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';
}
Разумность поддержки нестандартного условного синтаксиса явно сомнительна.
Это Альтернативный синтаксис 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
Works for if
, for
, while
, foreach
, and switch
. Может быть весьма удобен для смешивания PHP и HTML.