JustUserR, вы как всегда правы) Я пересмотрел свое мнение на счет этого.
Сейчас начал создавать свой небольшой mvc-каркас, так сказать мини-фреймворк для будующих приложений по примеру реализации Yii framework, думаю в нем будет использоваться именно этот шаблонизатор.
Эх что то я разочаровался, так как не вижу смысла использовать такой класс, так как вместо него можно использовать просто пользовательскую функцию для вставки подшаблонов:
JustUserR, благодарю, что то я сразу не догадался вытащить нужные библиотеки из скомпилированные версии, но вот не пойму какой именно релиз там нужно скачать? Вижу там только PHP 5.2 (5.2.13)
Тем не менее в общем случае в вашем коде переменная $block может быть подвержена такому перекрытию в случае если в хеш-массиве $data будет передан соответствующий ключ - но это легко решается путем добавления опции EXTR_SKIP к функции extract поскольку по умолчанию подразумевается перезапись опцией EXTR_OVERWRITE
Вы правы, поправил, заодно изменил $block на $template_block, что бы уж наверняка
Едиственное, что пока не использовал runkit_lint_file, так как у меня на локальном сервере выдает ошибку, что такая функция не найдена, наверно должно быть установлено какое то расширение.
С PHP_CodeFilter пока не знаком, обязательно попробую.
Разработанная вами новая версия класса является действительно более эффективной - а также компоненты вложенных шаблонов являются лучше разделенными и контролируемыми
Спасибо большое
JustUserR пишет:
во-первых перед выполнением оператора extract имеет смысл просмотреть значения всех переменных которые соответствуют ключам хеш-массива - и выполнить их сохранение во временный массив а также после окончания выполнения PHP-кода подшаблона вернуть старые значения переменным - это позволит защититься от потенциальных ошибок при передаче в хеш-массиве $data ключей которые соответствуют реальным переменным
Здесь не совсем понял, вы имеете в виду, что возможны конфликты между внешними переменными и переменными полученными из массива $data? Если да, то такого конфликта не может быть, так как метод block работает независимо и возвращает полностью обработанный шаблон где все переменные уже заменены на их значения.
JustUserR пишет:
Во-вторых можно добавить проверку на синтаксическую правильность подключаемого шаблона
Как вы наверно поняли, подшаблоны подключаются через метод block и можете подключать их таким образом сколько угодно.
Подшаблон обрабатывается вместе с массивом данных предназначенных для него, в примере массивом данных является $data_menu: