Jump to content
  • 0

О длинной записи циклов и условий


swetlana
 Share

Question

в php есть широко распространённый си-подобный синтаксис для условий и циклов с фигурными скобками:


foreach($a as $:) {
if($b == $c) { … }
}

но есть ещё и редко применяемый с двоеточием и закрывающим ключевым словом:


foreach($a as $:):
if($b == $c):

endif;
endforeach;

Почему один используется часто, а другой редко?

Кроме того, что второй вариант более длинный, есть ещё какие соображения против?

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

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


foreach ($settingsArr as $preset)
{
$presetXml = $settingsXml->addChild('preset');
if($this->checkRights($params['side'], $params['module'], 'deletePreset'))
$presetXml->addAttribute('deleteLink', $this->getLink(array($params['side'], $params['module'], 'deletePreset', $preset['id'])));
if($this->checkRights($params['side'], $params['module'], 'editPreset'))
$presetXml->addAttribute('editLink', $this->getLink(array($params['side'], $params['module'], 'editPreset', $preset['id'])));
$presetProp = $presetXml->addChild('prop');
foreach ($preset as $name => $value)
$presetProp->addAttribute($name, $value);
}

АП: второй стиль с endif, endforeach может быть удобнее в php-шаблонах где логика перемешана дизайном, хотя это плохо, во многих cms используется. си-подобный лучше подходит для чисто "программных" фалов.

Edited by Быколай
  • Like 1
Link to comment
Share on other sites

  • 0

Речь как раз о php-шаблонах.

Но это совсем не значит, что логика перемешана с дизайном :)

то есть, вот пример кода:


<div class="catalog-element">
<header>
<?if(is_array($arResult["PREVIEW_PICTURE"]) || is_array($arResult["DETAIL_PICTURE"])):?>
<div class="item_view">
<?if(is_array($arResult["DETAIL_PICTURE"])):?>
<img src="<?=$arResult["DETAIL_PICTURE"]["SRC"]?>">
<?elseif(is_array($arResult["PREVIEW_PICTURE"])):?>
<img src="<?=$arResult["PREVIEW_PICTURE"]["SRC"]?>">
<?endif?>
<?if(count($arResult["MORE_PHOTO_PREVIEW"])>0):?>
<ul class="morephoto">
<?foreach($arResult["MORE_PHOTO_PREVIEW"] as $k => $PHOTO):?>
<li><a target="_blank" href="<?=$arResult["MORE_PHOTO"][$k]["SRC"]?>"><img src="<?=$PHOTO["SRC"]?>"></a></li>
<?endforeach?>
</ul>
<?endif?>
</div>
<?endif?>
</header>

В принципе, на мой взгляд более понятно, чем когда применяются фигурные скобки.

Просто запись достаточно редкая. Вот у меня и были опасения: а вдруг какие есть сображения против? Вдруг это например остаточные явления из php2, которые не будут поддерживаться в php6?

Link to comment
Share on other sites

  • 0

Речь как раз о php-шаблонах.

Но это совсем не значит, что логика перемешана с дизайном :)

то есть, вот пример кода:


.......

В принципе, на мой взгляд более понятно, чем когда применяются фигурные скобки.

Просто запись достаточно редкая. Вот у меня и были опасения: а вдруг какие есть сображения против? Вдруг это например остаточные явления из php2, которые не будут поддерживаться в php6?

бррр.. как я такие шаблоны не люблю, бяка :)

xslt рулит!! 21 век на дворе, html 5 пришёл, php и perl 6-ые на носу, а у наши cms шаблонят как 1015 лет назад. Как заметил Д. Котеров в статье причины стремительного успеха php

очевидно, что embedded-синтаксис — средство завлечения новой аудитории, а не инструмент языка.

думаю ради обратной совместимости будет поддерживаться 99%, хотя это можно на php.net пошукать конкретнее, какие там планы у разработчиков.

вот embedded-синтаксис, будь на то моя воля, я бы из 6-ой версии исключил, что бы не было всяких смарти, битриксов и проч не православной шаблонизации :)

Edited by Быколай
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy