Почему почти вся платформа PHP использует “<? php повторяют …?>”

  • Короткий тег PHP был удержан от использования некоторое время.
  • Почти все платформы PHP используют подробную форму (например, симфония, Yii, Kohana)
  • Присяжный острослов является известным движком шаблонов PHP, который поддерживает более короткую форму {$var}
  • Движки шаблонов (как Присяжный острослов) легче для веб-дизайнера
    • Редактирование шаблона показывает {$var} вместо того, чтобы ничего не показать (из-за <..>)
    • Более короткий синтаксис (меньше ввода особенно, когда <> находятся на том же, включают некоторую раскладку клавиатуры),
    • Шаблоны предварительно компилируются и кэшировали предоставление почти тех же действий
  • Все те точки заставляют меня задаться вопросом, почему вся платформа, кажется, использует супер длинный синтаксис PHP? Существует ли сильная сторона не использования движка шаблонов как Присяжный острослов (кроме маленьких издержек)?

5
задан hakre 31 March 2013 в 17:15
поделиться

8 ответов

Вот что Фабьен Потенсье из фреймворка Symfony говорит о шаблонизаторах:

Почему люди до сих пор думают, что PHP - это шаблонизатор? шаблонизатором? Конечно, PHP начинал свою жизнь как шаблонизатор язык, но он не развивался как в последние годы. Если вы думаете, что PHP все еще является шаблонным языком, можете ли вы назвать хотя бы одно недавнее изменение в языке PHP, которое улучшило PHP как язык шаблонов? Я не могу вспомнить ни одного.

Он также описывает особенности, которые он ищет в языке шаблонов:

  • Краткость
  • Синтаксис, ориентированный на шаблоны
  • Возможность повторного использования
  • Безопасность
  • Режим песочницы

А также некоторые особенности, которые выделяют его любимый язык шаблонов Twig:

  • Родное наследование шаблонов (шаблоны компилируются как классы);
  • Твердая автоматическая автоэскейпизация (без сопутствующих накладных расходов во время выполнения, поскольку все делается во время компиляции);
  • Очень безопасный режим песочницы (белый список тегов, фильтров и методов, которые которые можно использовать в шаблонах);
  • Большая расширяемость: вы переопределяете все, даже основные функции, путем используя свои собственные теги и фильтры в качестве расширения; но вы также можете манипулировать AST (Abstract Syntax Tree) до компиляции. Используя используя эти возможности, вы можете даже создать свой собственный DSL (Domain специфический язык), ориентированный на ваше приложения.

В комментариях к статье он говорит: "Возможно, это будет частью Symfony 2. Но сначала мне нужны отзывы сообщества."

Читайте полную статью, чтобы получить все его аргументы в пользу систем шаблонов.

5
ответ дан 18 December 2019 в 05:14
поделиться

Не знаю, что я бы назвал "супердлинным синтаксисом".

Дело в том, что короткие теги не всегда включены на серверах, тогда как стандартные по умолчанию обычно включены. Безопаснее идти этим путем.

10
ответ дан 18 December 2019 в 05:14
поделиться

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

В моем опыте я редко видел, чтобы непрограммист полностью или легко использовал шаблонизатор. Возьмем эти два примера:

Smarty:

<select>
{foreach from=$k item=v}
 <option value="{$v.value|escape:'html'}">{$v.label|escape:'html'}</option>
{/foreach}
</select>

PHP:

<select>
<?php foreach ($k as $v) { ?>
 <option value="<?php echo htmlentities($v['value']); ?>"><?php echo htmlentities($v['label']); ?></option>
<?php } ?>
</select>

Сейчас синтаксис Smarty может быть немного чище - но, честно говоря, сможет ли кто-нибудь кроме программиста комфортно работать с любым из этих наборов кода? Шаблонные движки добавляют дополнительный уровень обработки/логики, не предлагая никаких серьезных преимуществ.

9
ответ дан 18 December 2019 в 05:14
поделиться

Есть несколько причин:

  • Они должны быть исключены из будущих версий php из-за проблем безопасности.
  • Некоторые хостеры отключают их.

Подробнее:

Можно ли использовать короткие теги PHP?

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

Я согласен с тем, что.

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

More

http://terrychay.com/article/short_open_tag.shtml

3
ответ дан 18 December 2019 в 05:14
поделиться

Короткие открытые теги не устарели, и они также не будут удалены в PHP6.

Статьи по ссылкам также содержат много полезной информации по теме.

Цитируя Расмуса Лердорфа (3-я ссылка):

Большинство аргументов, которые я видел, в основном говорят, что - это зло, и оно не должно существовать, но это не является текущим вопросом. Он существует, и мы не собираемся его удалять, поэтому единственным реальным аргументом здесь является фактор WTF, вносимый кодом, который может включать и выключать эти теги на лету. Это единственный весомый аргумент, который я видел. Можно ли проверить PHP-код с помощью xmllint и является ли корректным xml, а это очевидно не так, совершенно не имеет значения. Мы все знаем, что когда вы используете , вы не соответствуете требованиям XML. И для подавляющего большинства это нормально. [...]

Я считаю, что людям нужен шаблонизатор. Как бы я ни ненавидел эту концепцию, и всегда очень резко высказывался по этому поводу, люди хотят более простых тегов шаблонизации. Они даже готовы разбирать файлы и генерировать PHP-код при каждом запросе, чтобы использовать {blah} вместо . Тот факт, что люди готовы пойти на снижение производительности на порядок ради синтаксического сахара, вызывает у меня недоумение, но просто посмотрите на все существующие системы шаблонов. И да, я знаю, что есть и другие причины для использования шаблонизаторов, например, ограничение набора функций для ненадежных авторов шаблонов и т.д., но вы удивитесь, как много людей просто хотят меньше печатать и чтобы их теги были красивее. Заставить этих людей перейти на - это победа для производительности и здравомыслия в моей книге. Да, это не полная победа, но это все равно победа.


Лично я стараюсь избегать систем шаблонизации, так как считаю, что обычный синтаксис PHP намного проще в использовании, чем язык шаблонизации, который изобретает то, что PHP может делать из коробки. С добавлением ViewHelpers у любого дизайнера не должно быть слишком много проблем с использованием регулярного синтаксиса. На самом деле, я всегда находил аргумент, шаблонизаторы (такие как Smarty) проще для веб-дизайнера довольно приниженным. Многословный синтаксис PHP может быть не очень привлекательным с эстетической точки зрения, но любой полумозг может его выучить.

3
ответ дан 18 December 2019 в 05:14
поделиться

Потому что они не хотят включать такую огромную библиотеку, как Smarty, чтобы сделать свои шаблоны на несколько символов короче.

2
ответ дан 18 December 2019 в 05:14
поделиться

В дополнение к другим ответам есть несколько вещей, которые делают Smarty (и аналогичные механизмы шаблонов) проблематичными.

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

Второе и самое важное: когда вы работаете в достойной объектно-ориентированной среде, Smarty значительно снизит функциональность вашего кода. При использовании PHP в качестве механизма шаблонов вы можете использовать $ this в своем шаблоне для вызова методов в контроллере, который анализирует шаблон. Более того, вы получаете доступ ко всем методам, унаследованным контроллером. Используя smarty, вы теряете всю эту функциональность, потому что $ this больше не относится к вашему контроллеру. По сути, вместо доступа ко всей вашей структуре из вашего шаблона у вас есть доступ только к ограниченной функциональности Smarty.

2
ответ дан 18 December 2019 в 05:14
поделиться

Особенность PHP в том, что он уже является языком шаблонов.

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

Большинство фреймворков достаточно гибкие, чтобы добавление шаблонизатора не требовало много работы. Если будет создан фреймворк, который заставит вас использовать Smarty, то он будет менее популярным, потому что сам фреймворк будет менее гибким.

Что касается "длинного синтаксиса", то ни один фреймворк не будет вешать свою шляпу на устаревший синтаксис с проблемами безопасности. Это может быть оставлено на усмотрение пользователя фреймворка, если он хочет использовать его или нет (чего никто не должен делать в наши дни), но построение ядра фреймворка на коротких тегах делает его менее переносимым.

15
ответ дан 18 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: