Есть ли различия между …
if ($value) { }
…а также…
if ($value): endif;
?
Они те же, но второй отличный, если у вас есть MVC в коде и не хотите иметь много эхо в вашем коде. Например, в моих .phtml
файлах (Zend Framework) я напишу что-то вроде этого:
<?php if($this->value): ?> Hello <?php elseif($this->asd): ?> Your name is: <?= $this->name ?> <?php else: ?> You don't have a name. <?php endif; ?>
Я лично очень ненавижу альтернативный синтаксис. Одна из приятных особенностей брекетов заключается в том, что большинство IDE, vim и т. Д. Имеют подсветку. В моем текстовом редакторе я могу дважды щелкнуть фигурку, и она выделит весь фрагмент, чтобы я мог видеть, где он заканчивается и начинается очень легко.
Я не знаю ни одного редактора, который может выделить endif, endforeach и т. Д.
Я думаю, все это говорит:
этот альтернативный синтаксис отлично подходит для улучшения удобочитаемости (как для PHP, так и для HTML!) в ситуациях, когда у вас есть их сочетание.
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
При смешивании HTML с PHP альтернативный sytnax гораздо легче читать. В обычных PHP-документах должен использоваться традиционный синтаксис.
В нашей компании предпочтительным способом обработки HTML является:
<? if($condition) { ?> HTML content here <? } else { ?> Other HTML content here <? } ?>
В конце концов, это действительно вопрос выбора одного и придерживаться его.
Вот где вы можете найти его в официальной документации: PHP: Альтернативный синтаксис для структур управления
Они действительно одинаковы, функционально.
Но если endif
слишком далеко от корреспондента, if
я думаю, что гораздо лучше использовать для него ссылку. Просто чтобы вы могли легко найти, где он был открыт. Независимо от того, на каком языке он:
if (my_horn_is_red or her_umbrella_is_yellow) { // ... // let's pretend this is a lot of code in the middle foreach (day in week) { sing(a_different_song[day]); } // ... } //if my_horn_is_red
Это действительно относится к любой аналогичной «закрывающей вещи»! 😉
Кроме того, в целом редакторы работают лучше с фигурными скобками, в том смысле, что они могут указать вам, где он был открыт. Но даже это не делает дескриптивные комментарии менее достоверными.
Я думаю, что это действительно зависит от вашего личного стиля кодирования. Если вы привыкли к C ++, Javascript и т. Д., Вам может быть удобнее использовать синтаксис {}. Если вы привыкли к Visual Basic, вы можете использовать if: endif; синтаксис.
Я не уверен, что можно окончательно сказать, что читать легче, чем другое – это личное предпочтение. Обычно я делаю что-то вроде этого:
<?php if ($foo) { ?> <p>Foo!</p><?php } else { ?> <p>Bar!</p><?php } // if-else ($foo) ?>
Легче ли читать, чем:
<?php if ($foo): ?> <p>Foo!</p><?php else: ?> <p>Bar!</p><?php endif; ?>
это вопрос мнения. Я понимаю, почему некоторые чувствовали, что второй способ проще – но только если вы не программировали в Javascript и C ++ всю свою жизнь. 🙂
Я думаю, что это особенно ясно, когда вы используете сочетание if
, s и foreach
es в сценариях вида:
<?php if ( $this->hasIterable ): ?> <h2>Iterable</h2> <ul> <?php foreach ( $this->iterable as $key => $val ):?> <?php for ( $i = 0; $i <= $val; $i++ ): ?> <li><?php echo $key ?></li> <?php endfor; ?> <?php endforeach; ?> </ul> <?php elseif ( $this->hasScalar ): ?> <h2>Scalar</h2> <?php for ( $i = 0; $i <= $this->scalar; $i++ ): ?> <p>Foo = Bar</p> <?php endfor; ?> <?php else: ?> <h2>Other</h2> <?php if ( $this->otherVal === true ): ?> <p>Spam</p> <?php else: ?> <p>Eggs</p> <?php endif; ?> <?php endif; ?>
в отличие от:
<?php if ( $this->hasIterable ){ ?> <h2>Iterable</h2> <ul> <?php foreach ( $this->iterable as $key => $val ){?> <?php for ( $i = 0; $i <= $val; $i++ ){ ?> <li><?php echo $key ?></li> <?php } ?> <?php } ?> </ul> <?php } elseif ( $this->hasScalar ){ ?> <h2>Scalar</h2> <?php for ( $i = 0; $i <= $this->scalar; $i++ ){ ?> <p>Foo = Bar</p> <?php } ?> <?php } else { ?> <h2>Other</h2> <?php if ( $this->otherVal === true ){ ?> <p>Spam</p> <?php } else { ?> <p>Eggs</p> <?php } ?> <?php } ?>
Это особенно полезно для длинных контрольных операторов, где вы не сможете увидеть верхнюю декларацию из нижней скобки.
Я бы использовал первый вариант, если это вообще возможно, независимо от новой опции. Синтаксис является стандартным, и все это знают. Он также обратно совместим.
Оба они одинаковы.
Но: если вы хотите использовать PHP в качестве языка шаблонов в ваших файлах просмотра (V of MVC), вы можете использовать этот альтернативный синтаксис для различения кода PHP, написанного для реализации бизнес-логики (Controller и Model parts of MVC) и gui- логика. Конечно, это не обязательно, и вы можете использовать любой синтаксис, который вам нравится.
ZF использует этот подход.
Между двумя синтаксисами нет технической разницы. Альтернативный синтаксис не нов; он был поддержан, по крайней мере, еще в PHP 4 и, возможно, даже раньше.
Вы можете предпочесть альтернативную форму, потому что она явно указывает, какая структура управления заканчивается: в конце, например, может только закончить блок while
, тогда как если вы столкнетесь с фигурной скобкой, это может закрыть что угодно.
Вы можете предпочесть традиционный синтаксис, хотя, если вы используете редактор, который имеет специальную поддержку фигурных скобок в других синтаксисах типа C. Например, Vim поддерживает несколько нажатий клавиш для навигации к соответствующим фигурным скобкам и к концам и концам блоков, разделенных фигурной скобкой. Альтернативный синтаксис нарушит эту функцию редактора.
Все зависит от того, лично ли я предпочитаю традиционный синтаксис с эхом и множеством отступов, так как его гораздо проще читать.
<?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> <?php else: ?> <a href="<?php echo $this->getModeUrl($_code) ?>" title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></a> <?php endif; ?> <?php endforeach; ?> <?php endif; ?> </p> <?php endif; ?>
Раньше я использовал фигурные скобки, но теперь я предпочитаю использовать этот короткий синтаксис из-за читаемости кода и доступности.
В конце концов вы просто не хотите искать следующую строку, а затем должны угадать, где она началась:
<?php } ?>
Технически и функционально они одинаковы.
Я думаю, что это вопрос предпочтения. Я лично использую:
if($something){ $execute_something; }
Раньше я использовал фигурные скобки для условий «if, else». Однако я нашел «if (xxx): endif;» является более смысловым, если код сильно обернут и более легко читается в любых редакторах.
Конечно, редакторы серии могут распознавать и выделять куски кода, когда выбраны фигурные скобки. Некоторые также хорошо справляются с «if (xxx): endif» (например, NetBeans)
Лично я бы рекомендовал «if (xxx): endif», но для проверки небольшого состояния (например, только одна строка кода) различий не так много.
Лично я предпочитаю делать это в двух отдельных разделах, но в пределах одного и того же 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; ?>
Но может быть, это медленнее?
Я чувствую, что ни один из существующих ответов полностью не определяет ответ здесь, поэтому я собираюсь сформулировать свою собственную точку зрения. Функционально оба метода одинаковы. Если программист знаком с другими языками после синтаксиса Си, то они, скорее всего, будут чувствовать себя более комфортно с фигурными скобками, иначе если php станет первым языком, который они изучают, они будут чувствовать себя более комфортно с синтаксисом if
endif
, поскольку кажется ближе к правильному языку.
Если вы действительно серьезный программист и вам нужно быстро все проделать, я верю, что синтаксис фигурного скобки превосходен, потому что он экономит время ввода текста
if(/*condition*/){ /*body*/ }
в сравнении с
if(/*condition*/): /*body*/ endif;
Это особенно верно в отношении других циклов, скажем, foreach
где вы в конечном итоге набрали дополнительные 10 символов. С фигурными скобками вам просто нужно ввести два символа, но для синтаксиса на основе ключевых слов вам нужно ввести целое дополнительное ключевое слово для каждого цикла и условного оператора.