2010-05-07 2 views
10

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

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

endif; 

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

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

+5

как сказано ниже, это альтернативный синтаксис. Также ужасно больно читать IMO, пожалуйста, избегайте этого в своем собственном коде. – nickf

+3

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

+1

@ Lo'oris, я не согласен с вами.Использование его в ваших шаблонах может улучшить читаемость, если вы спросите меня: например, http://stackoverflow.com/questions/2788891/strange-php-syntax/2789008#2789008. –

ответ

14

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

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

28

Это РНР Alternative syntax for control structures.

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

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

В общем:

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

такое же, как

if(cond) { 
... 
... 
} 
+1

Я верю тебе ... но почему в добром имени Сатаны ты хочешь это сделать? – BIBD

+2

@CodeSlave: Я полагаю, что это выглядит лучше, если вы вставляете HTML-код. – Daniel

1

Вы можете прочитать об этом в Alternative syntax for control structures в руководстве по 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; 
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'; 
} 

Мудрость поддерживает нестандартную условный синтаксис явно сомнительна.

+0

Этот синтаксис может быть очень полезен в шаблонах, поэтому ihmo не вызывает сомнений. Или, по крайней мере, не очевидно;) –

Смежные вопросы