Большинство ответов на самом деле не касаются основного вопроса : что работает лучше, когда вы смотрите на какой-то код, и есть много закрывающих команд, таких как } } } }(что также можно сделать endif), и вы хотите знать, где они были открыты? Ответ ни один . По сути, это первое «правило» принципов проектирования Python .
cregox 15.12.14
7
Очевидно, что {}это лучше и : endif;является злодеянием, которого бы не было, если бы жизнь была справедливой. С хорошим текстовым редактором у вас будет сочетание клавиш для соответствующих скобок, чтобы перейти от открытия к закрытию или наоборот. Ничего подобного не существует и не может существовать для отвратительного : endif;синтаксиса.
developerwjk
3
@developerwjk, как это может никогда не существовать?
Алекс
Ответы:
177
Они одинаковы, но второе замечательно, если в вашем коде есть 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;?>
@alex Это будет работать и с фигурными скобками, но, по крайней мере, лично я нахожу этот способ более понятным в подобных вещах. Потому что вы знаете, что это конец if, а не конец какого-то цикла или что-то еще. Думаю, у вас есть конец и конец или что-то подобное тоже.
Свиш
10
Я бы не стал использовать <? =?>, Потому что он не поддерживается на всех серверах, особенно на виртуальных хостингах, которые не позволяют менять php.ini.
Сики Лин
2
Подходящая точка <php endif; ?> - вы можете точно сказать, что заканчивается даже со многими строками HTML между предыдущим if / else и этим оператором.
Фентон
7
почему "второй класс хорош, если вы не хотите, чтобы в вашем коде было много эха"? Я думаю, что то же самое для традиционного синтаксиса {}. Никакого дополнительного эха не требуется <?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>. В чем разница <?php if(...): ?> ... <?php else: ?> ... <?php endif ?>?
Ситху
9
Не уверен, почему этот ответ самый высокий, так как это не лучший пример (вы можете добиться того же самого с помощью фигурных скобок).
Рейнир Капер
69
Я лично очень ненавижу альтернативный синтаксис. В скобках есть одна приятная вещь: большинство IDE, vim и т. Д. Имеют подсветку скобок. В моем текстовом редакторе я могу дважды щелкнуть фигурную скобку, и она выделит весь фрагмент, чтобы я мог видеть, где он заканчивается и начинается очень легко.
Я не знаю ни одного редактора, который мог бы выделить endif, endforeach и т. Д.
Предполагается, что это будет использоваться в шаблонах PHP, где начало и конец блока разделены фрагментом иностранного языка. Если ваша IDE понимает PHP достаточно хорошо, чтобы разобрать его, она также должна выделяться endifкак конец блока. Если этого не произойдет, вы ничего не купите с помощью, так }как в любом случае это не будет соответствовать.
Павел Минаев
2
Большинство ide (по крайней мере те, которые я использовал) только выделяют {}
AntonioCS
11
Netbeans 7.x с радостью подчеркивает соответствие endforeach, endif и т. Д.
Джонатан Дэй
@Г-н. Минаев: Считыватель скобок будет анализироваться правильно, вероятно, в 98% случаев, даже если в нем есть сторонний код. Он потерпит неудачу только тогда, когда внутри него будет эзотерическая скобка «открывающий, но не закрывающий код». Да, это случается, но это случается редко. Почему вы думаете, что комплекс "конец-что угодно"; парсерный подход пойдет лучше практически, чем простое решение?
PatlaDJ
Я думаю, что наиболее важным моментом является описательность , когда это необходимо. Таким образом, мы можем легко найти, где он был открыт, независимо от того, какой инструмент нам может понадобиться. Особенно актуально для PHP, который время от времени нужно видеть, используя самые упрощенные редакторы.
Cregox 15.12.14
49
Я думаю, что это сказать все
этот альтернативный синтаксис отлично подходит для улучшения разборчивости (как для PHP, так и для HTML!) в ситуациях, когда у вас есть их сочетание.
Но если endifэто слишком далеко от корреспондента, ifя думаю, что гораздо лучше дать на него ссылочный комментарий. Просто чтобы вы могли легко найти, где он был открыт. Неважно, что это за язык:
if(my_horn_is_red or her_umbrella_is_yellow){// ...// let's pretend this is a lot of code in the middleforeach(day in week){
sing(a_different_song[day]);}// ...}//if my_horn_is_red
Это на самом деле относится к любой аналогичной «закрывающей вещи»! ;)
Кроме того, в целом редакторы лучше справляются с фигурными скобками, в том смысле, что они могут указать вам, где он был открыт. Но даже это не делает описательные комментарии менее действительными.
согласитесь, это намного лучше - вместо того, чтобы вводить endif - вы можете сказать, что на самом деле выполняет условие if.
cartalot
@cartalot, возможно, было бы даже неплохо встроить язык (как необязательный закрывающий аргумент именованного блока), чтобы у нас могли быть ошибки при закрытии неправильных блоков в неправильных местах! :)
Я думаю, что это действительно зависит от вашего личного стиля кодирования. Если вы привыкли к C ++, Javascript и т. Д., Вам может быть удобнее использовать синтаксис {}. Если вы привыкли к Visual Basic, вы можете использовать if: endif; синтаксис.
Я не уверен, что можно однозначно сказать, что одно легче читать, чем другое - это личное предпочтение. Я обычно делаю что-то вроде этого:
это вопрос мнения. Я понимаю, почему некоторые считают, что второй способ проще - но только если вы не программировали на Javascript и C ++ всю свою жизнь. :)
Нет, скобки объективно легче читать (если не использовать египетскую версию). Даже если вы делаете скобки так, чтобы они шли как египтянин, его легче читать, чем синтаксис VB, потому что современные текстовые редакторы будут иметь функцию сопоставления скобок, которая поможет вам перейти от открывающей к закрывающей скобке или наоборот. Нет никакого способа, которым они могли бы иметь функцию сопоставления синтаксиса VB. Также вы должны рассмотреть вопрос о вложенности, и VB с треском проваливается на этом.
developerwjk
5
Я бы использовал первый вариант, если это вообще возможно, независимо от нового варианта. Синтаксис стандартный, и все это знают. Это также обратно совместимо.
Но: если вы хотите использовать PHP в качестве языка шаблонов в ваших файлах представлений (V MVC), вы можете использовать этот альтернативный синтаксис, чтобы различать код php, написанный для реализации бизнес-логики (части контроллера и модель MVC), и логика. Конечно, это не обязательно, и вы можете использовать любой синтаксис, который вам нравится.
Технического различия между этими двумя синтаксисами нет. Альтернативный синтаксис не нов; он был поддержан, по крайней мере, еще в PHP 4, а возможно, даже раньше.
Вы можете предпочесть альтернативную форму, потому что она явно указывает, какая структура управления заканчивается: endwhileнапример, может завершить толькоwhile блок, тогда как, если вы встретите фигурную скобку, она может закрыть что угодно.
Однако вы можете предпочесть традиционный синтаксис, если используете редактор, который имеет специальную поддержку скобок в других C-подобных синтаксисах. Например, Vim поддерживает несколько нажатий клавиш для перехода к соответствующим фигурным скобкам, а также к началу и концу разделенных фигурными скобками блоков. Альтернативный синтаксис нарушит эту функцию редактора.
Хороший текстовый редактор будет иметь ярлык для соответствия скобкам, чтобы вы могли начать с него. Это endif;будет трудно найти начало, потому что у них не будет подобной функции для этого, а код в стиле VB не будет хорошо вложен.
developerwjk
3
Все зависит, лично я предпочитаю традиционный синтаксис с эхом и множеством отступов, так как его намного легче читать.
<?php
if($something){
doThis();}else{
echo '<h1>Title</h1>
<p>This is a paragraph</p>
<p>and another paragraph</p>';}?>
Я согласен, что синтаксис alt более понятен с различными конечными предложениями, но мне действительно трудно справиться с ними без помощи выделения текста текстовым редактором, и я просто не привык видеть «сжатый» код, подобный этому:
если бы вы прочитали всю ветку: предпочтителен альтернативный синтаксис и намного <em> чище </ em> при использовании шаблонов или использовании иностранного языка в представлениях php
Юрай Блахунка
1
Я использовал фигурные скобки для условий «если, иначе». Тем не менее, я нашел "if (xxx): endif;" более семантически, если код сильно упакован и его легче читать в любых редакторах.
Конечно, многие редакторы способны распознавать и выделять фрагменты кода, когда выбраны фигурные скобки. Некоторые также преуспевают в паре «if (xxx): endif» (например, NetBeans)
Лично я бы порекомендовал «if (xxx): endif», но для небольшой проверки условий (например, только одна строка кода) различий не так много.
Я чувствую, что ни один из ранее существовавших ответов полностью не определяет здесь ответ, поэтому я собираюсь сформулировать свою собственную точку зрения. Функционально оба метода одинаковы. Если программист знаком с другими языками, использующими синтаксис C, то он, вероятно, будет чувствовать себя более комфортно с фигурными скобками, или, если php - первый язык, который они изучают, он будет чувствовать себя более комфортно с ifendifсинтаксисом, так как он кажется ближе на обычный язык.
Если вы действительно серьезный программист и вам нужно быстро все сделать, то я считаю, что синтаксис фигурных скобок лучше, потому что он экономит время при наборе текста
if(/*condition*/){/*body*/}
по сравнению с
if(/*condition*/):/*body*/
endif;
Это особенно верно для других циклов, скажем, foreachгде вы в конечном итоге наберете дополнительные 10 символов. С фигурными скобками, вам просто нужно ввести два символа, но для синтаксиса на основе ключевых слов вы должны ввести целое дополнительное ключевое слово для каждого цикла и условного оператора.
} } } }
(что также можно сделатьendif
), и вы хотите знать, где они были открыты? Ответ ни один . По сути, это первое «правило» принципов проектирования Python .{}
это лучше и: endif;
является злодеянием, которого бы не было, если бы жизнь была справедливой. С хорошим текстовым редактором у вас будет сочетание клавиш для соответствующих скобок, чтобы перейти от открытия к закрытию или наоборот. Ничего подобного не существует и не может существовать для отвратительного: endif;
синтаксиса.Ответы:
Они одинаковы, но второе замечательно, если в вашем коде есть MVC и вы не хотите, чтобы в вашем коде было много эха. Например, в моих
.phtml
файлах (Zend Framework) я напишу что-то вроде этого:источник
{}
. Никакого дополнительного эха не требуется<?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>
. В чем разница<?php if(...): ?> ... <?php else: ?> ... <?php endif ?>
?Я лично очень ненавижу альтернативный синтаксис. В скобках есть одна приятная вещь: большинство IDE, vim и т. Д. Имеют подсветку скобок. В моем текстовом редакторе я могу дважды щелкнуть фигурную скобку, и она выделит весь фрагмент, чтобы я мог видеть, где он заканчивается и начинается очень легко.
Я не знаю ни одного редактора, который мог бы выделить endif, endforeach и т. Д.
источник
endif
как конец блока. Если этого не произойдет, вы ничего не купите с помощью, так}
как в любом случае это не будет соответствовать.Я думаю, что это сказать все
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
При смешивании HTML с PHP альтернативный sytnax намного легче читать. В обычных документах PHP должен использоваться традиционный синтаксис.
источник
В нашей компании предпочтительным способом обработки HTML является:
В конце концов, это действительно вопрос выбора одного и придерживаться его.
источник
<?php if(TRUE){?> test <?php }?> <?php else{ ?> test2 <?php }?>
Они действительно одинаковы по функциональности.
Но если
endif
это слишком далеко от корреспондента,if
я думаю, что гораздо лучше дать на него ссылочный комментарий. Просто чтобы вы могли легко найти, где он был открыт. Неважно, что это за язык:Это на самом деле относится к любой аналогичной «закрывающей вещи»! ;)
Кроме того, в целом редакторы лучше справляются с фигурными скобками, в том смысле, что они могут указать вам, где он был открыт. Но даже это не делает описательные комментарии менее действительными.
источник
Вот где вы можете найти его в официальной документации: PHP: альтернативный синтаксис для структур управления
источник
Я думаю, что это особенно ясно, когда вы используете сочетание
if
s,for
s иforeach
es в скриптах вида:в отличие от:
Это особенно полезно для длинных операторов управления, где вы не сможете увидеть верхнюю декларацию из нижней скобки.
источник
Я думаю, что это действительно зависит от вашего личного стиля кодирования. Если вы привыкли к C ++, Javascript и т. Д., Вам может быть удобнее использовать синтаксис {}. Если вы привыкли к Visual Basic, вы можете использовать if: endif; синтаксис.
Я не уверен, что можно однозначно сказать, что одно легче читать, чем другое - это личное предпочтение. Я обычно делаю что-то вроде этого:
Легче ли читать, чем:
это вопрос мнения. Я понимаю, почему некоторые считают, что второй способ проще - но только если вы не программировали на Javascript и C ++ всю свою жизнь. :)
источник
Я бы использовал первый вариант, если это вообще возможно, независимо от нового варианта. Синтаксис стандартный, и все это знают. Это также обратно совместимо.
источник
Оба одинаковы.
Но: если вы хотите использовать PHP в качестве языка шаблонов в ваших файлах представлений (V MVC), вы можете использовать этот альтернативный синтаксис, чтобы различать код php, написанный для реализации бизнес-логики (части контроллера и модель MVC), и логика. Конечно, это не обязательно, и вы можете использовать любой синтаксис, который вам нравится.
ZF использует этот подход.
источник
Технического различия между этими двумя синтаксисами нет. Альтернативный синтаксис не нов; он был поддержан, по крайней мере, еще в PHP 4, а возможно, даже раньше.
Вы можете предпочесть альтернативную форму, потому что она явно указывает, какая структура управления заканчивается:
endwhile
например, может завершить толькоwhile
блок, тогда как, если вы встретите фигурную скобку, она может закрыть что угодно.Однако вы можете предпочесть традиционный синтаксис, если используете редактор, который имеет специальную поддержку скобок в других C-подобных синтаксисах. Например, Vim поддерживает несколько нажатий клавиш для перехода к соответствующим фигурным скобкам, а также к началу и концу разделенных фигурными скобками блоков. Альтернативный синтаксис нарушит эту функцию редактора.
источник
В конце концов, вы просто не хотите искать следующую строку, а затем угадывать, где она началась:
Технически и функционально они одинаковы.
источник
endif;
будет трудно найти начало, потому что у них не будет подобной функции для этого, а код в стиле VB не будет хорошо вложен.Все зависит, лично я предпочитаю традиционный синтаксис с эхом и множеством отступов, так как его намного легче читать.
Я согласен, что синтаксис alt более понятен с различными конечными предложениями, но мне действительно трудно справиться с ними без помощи выделения текста текстовым редактором, и я просто не привык видеть «сжатый» код, подобный этому:
источник
Раньше я использовал фигурные скобки, но сейчас я предпочитаю использовать этот альтернативный синтаксис из-за читаемости и доступности кода.
источник
Лично я предпочитаю делать это в двух отдельных разделах, но в одном PHP:
Но может быть, это медленнее?
источник
Я думаю, что это вопрос предпочтений. Я лично использую:
источник
Я использовал фигурные скобки для условий «если, иначе». Тем не менее, я нашел "if (xxx): endif;" более семантически, если код сильно упакован и его легче читать в любых редакторах.
Конечно, многие редакторы способны распознавать и выделять фрагменты кода, когда выбраны фигурные скобки. Некоторые также преуспевают в паре «if (xxx): endif» (например, NetBeans)
Лично я бы порекомендовал «if (xxx): endif», но для небольшой проверки условий (например, только одна строка кода) различий не так много.
источник
Я чувствую, что ни один из ранее существовавших ответов полностью не определяет здесь ответ, поэтому я собираюсь сформулировать свою собственную точку зрения. Функционально оба метода одинаковы. Если программист знаком с другими языками, использующими синтаксис C, то он, вероятно, будет чувствовать себя более комфортно с фигурными скобками, или, если php - первый язык, который они изучают, он будет чувствовать себя более комфортно с
if
endif
синтаксисом, так как он кажется ближе на обычный язык.Если вы действительно серьезный программист и вам нужно быстро все сделать, то я считаю, что синтаксис фигурных скобок лучше, потому что он экономит время при наборе текста
по сравнению с
Это особенно верно для других циклов, скажем,
foreach
где вы в конечном итоге наберете дополнительные 10 символов. С фигурными скобками, вам просто нужно ввести два символа, но для синтаксиса на основе ключевых слов вы должны ввести целое дополнительное ключевое слово для каждого цикла и условного оператора.источник