Шаблоны PHP, поиск золотой середины.

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

 

Аксиома которая является толчком к использованию шаблонизаторов звучит примерно так: нужно разделять PHP код от кода HTML в отдельные файлы или хотябы блоки. PHP позволяет очень плотно работать с текстами HTML внедряя в него скрипт PHP, иногда бывает непонятно что главное HTML код в котором вставки скрипта или PHP код в котором своеобразный вывод HTML кода. Все начинают работать в PHP без четкого разделения этих составляюших, и потом также используют этот подход для не важных или маленьких проектов. Когда же такой подход показывает свою неэффективность? Когда проект начинает разрастаться и он начинает требовать структуризации для того чтобы сам создатель этого кода не затерялся в его лабиринтах. В больших проектах где не была внедрена разделение HTML кода от PHP начинаются большие потери времени на поддержание кода. Во время создания структура кода осознается програмистом как единое целое оно растет и развивается, но в один момент плохая структуризация может сыграть злую шутку и начинать сильно изматывать.  Большое количество времени тратится на поиски нужных блоков, осознанные переходы между ними требуют либо специализированного софта либо дополнительных затрат времени. Проблемы усугубляются если после работы над проектом проходит какоето время или над проектом начинает работать новый человек, тогда уже память не может помочь в поиске нужного кода и его приходится вылавливать с помощью всяких уловок.

Управляющим свойством обладает только PHP код, тоесть этим языком мы описываем подключение дополнительных файлов, обработку данных, запуск внешних программ а вот код HTML в сущьности является ответом который получает пользователь после того как программа php завершит работу. В свою очередь HTML код шаблона это готовый для отображения в браузере код, в который нужно подставить нужные данные и блоки. Данные и совокупность блоков генерируются кодом PHP.  Шаблонизатор и есть подпрограмма, а в некоторых случаях свод правил, которая регламинтирует подставку данных в html код.  Также немаловажным, является функция взаимной вложенности подшаблонов, что позволяет создавать один блок кода html и использовать его в нескольких страницах.

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

При созданий шаблонизаторов их создатели очень часто скатываются в крайности жертвуя либо функциональностью либо быстродействием проекта основанного на их шаблонизаторе.  Примером переусердствования может стать очень популярный шаблонизатор Smarty. Внем такое количество конструкций что могут позавидовать некоторые языки програмирования. Его изучение может занять очень много времени. Набор его функции постоянно пополняется. Однако он как и другие шаблонизаторы такого типа имеет несколько принципиальных ограничений. Во первых для его работы тратится очень большое количество системных ресурсов, значительное количество дополнительных действий для работы шаблонизатора, таких как инициализация шаблонизатора, ввод настроечных данных, внедрение данных в объект шаблона для его последующей работы. Вся это ставит под большое сомнение целесообразность использования такого подхода. Однако у этого подхода большое количество приверженцев, которые потратив большое количество усилий на его изучение и внедрение не готовы объективно оценить негативные стороны этого подхода.