Разница между if () {} и if (): endif; - PullRequest
151 голосов
/ 19 февраля 2009

Есть ли различия между ...

if ($value) {

}

... и ...

if ($value):

endif;

Ответы [ 18 ]

5 голосов
/ 19 февраля 2009

Оба одинаковы.

Но: Если вы хотите использовать PHP в качестве языка шаблонов в ваших файлах представлений (V из MVC), вы можете использовать этот альтернативный синтаксис для различения php-кода, написанного для реализации бизнес-логики (части контроллера и модели MVC) и gui-логики. Конечно, это не обязательно, и вы можете использовать любой синтаксис, который вам нравится.

ZF использует этот подход.

3 голосов
/ 01 февраля 2012

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

<?php
    if($something){
        doThis();
    }else{
        echo '<h1>Title</h1>
            <p>This is a paragraph</p>
            <p>and another paragraph</p>';
    }
?>

Я согласен, что синтаксис alt более понятен с различными конечными предложениями, но мне действительно трудно справиться с ними без помощи выделения текста текстовым редактором, и я просто не привык видеть «сжатый» код, подобный этому:

<?php if( $this->isEnabledViewSwitcher() ): ?>
<p class="view-mode">
    <?php $_modes = $this->getModes(); ?>
    <?php if($_modes && count($_modes)>1): ?>
    <label><?php echo $this->__('View as') ?>:</label>
    <?php foreach ($this->getModes() as $_code=>$_label): ?>
        <?php if($this->isModeActive($_code)): ?>
            <strong title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></strong>&nbsp;
        <?php else: ?>
            <a href="<?php echo $this->getModeUrl($_code) ?>" title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></a>&nbsp;
        <?php endif; ?>
    <?php endforeach; ?>
    <?php endif; ?>
</p>
<?php endif; ?>
2 голосов
/ 14 июня 2011

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

<?php } ?>

Технически и функционально они одинаковы.

2 голосов
/ 16 июля 2009

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

1 голос
/ 10 мая 2012

Я использовал фигурные скобки для условий «если, иначе». Тем не менее, я нашел "if (xxx): endif;" более семантически, если код сильно упакован и его легче читать в любых редакторах.

Конечно, многие редакторы способны распознавать и выделять фрагменты кода, когда выбраны фигурные скобки. Некоторые также преуспевают в паре «if (xxx): endif» (например, NetBeans)

Лично я бы порекомендовал "if (xxx): endif", но для небольшой проверки условий (например, только одна строка кода) нет особых различий.

1 голос
/ 19 февраля 2009

Я думаю, что это вопрос предпочтений. Я лично использую:

if($something){
       $execute_something;
}
1 голос
/ 08 марта 2012

Лично я предпочитаю делать это в двух отдельных разделах, но в одном и том же PHP, например:

<?php 
    if (question1) { $variable_1 = somehtml; }
    else { $variable_1 = someotherhtml; } 

    if (question2) {
        $variable_2 = somehtml2;
    }

    else { 
        $variable_2 = someotherhtml2;
    }         

etc.
$output=<<<HERE
htmlhtmlhtml$variable1htmlhtmlhtml$varianble2htmletcetcetc
HERE;
echo $output;

?>

Но, может быть, медленнее?

0 голосов
/ 03 мая 2016

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

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

if(/*condition*/){
    /*body*/ 
}

по сравнению с

if(/*condition*/):
    /*body*/
endif;

Это особенно верно для других циклов, скажем, foreach, где вы в конечном итоге наберете дополнительные 10 символов. С помощью фигурных скобок вам просто нужно ввести два символа, но для синтаксиса на основе ключевых слов вы должны ввести целое дополнительное ключевое слово для каждого цикла и условного оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...