Какие способы релизации шаблонов и хуков есть в PHP?
Я знаю что есть гугл, есть книжки и есть код. Не углубляясь в вопрос, я мельком нашел пару статей которые больше запутали, или кажутся не совсем правильными.
Поэтому хотелось бы спросить объяснения на пальцах и простыми словами.
Примеры приветствуются.
1. Как реализовать применение шаблонов?
2. Как реализовать хуки?
Знаю например что можно делать шаблоны через буфер.
Т.е. формировать страницу, помещать в буфер, там её изменять и потом уже выводить. ob_start, ob_get_contents().
А вот с хуками сложнее. Как можно в коде написать функцию и дать возможность пользователю самому добавлять код который будет выполняться до неё, или после. Единственный способ который я представляю - парсить файлы и компилировать итог в отдельный php файл, который потом и будет исполняться.
Константин Грачев: видимо слишком тонко сказал. Я имею ввиду, есть ли примеры более простые, типа "Hello world", которые описывают принцип стандартными средствами?
Хуки можете сделать так: получаете список всех зарегистрированных функций, фильтруете их по названию, те что подошли - выполняете.
Но это путь в никуда и так делать не стоит.
На счет кода до и после - очень странный кейс и тоже оооочень хреновый, так делать нельзя.
Получаете список токенов через token_get_all далее находите вызов конкретно вашей функции то, что до и после конкатенируете. Далее выполняете то что вам надо и в eval.
Но еще раз это пример ужасного подхода и так писать нельзя.
Прочитал по token_get_all. Да же не подозревал что такое есть.
Для чего это все.
Делал шаблон для wordpress и увидел подобный механизм. Там мало того, что можно предопределить любую стандартную функцию, просто описав её в файле functions.php в папке с темой, но и описать функции которые будут выполняться до и после.
Попытался полистать код ядра - ничего не понял. Стало интересно как такое реализовано.
Ну это ясно, что wp, или drupal или еще какая cms))
> Там мало того, что можно предопределить любую стандартную функцию
переопределять функцию в php можно только за счет расширения runkit, но подобное можно делать исключительно для тестирования, а для живого сайта это огромнейшая дыра в безопасности.
> описать функции которые будут выполняться до и после.
На сколько я помню (последний раз тыкал wp ~6 лет назад) до и после определяется на базе названия функции, а не на основании кода, в котором она находится.
Подход хуков (по крайней в терминологии wp) является антипаттерном и хотел вас предостеречь))
index0h: спасибо за предостережение. Но я пока не могу представить другого способа как можно реализовать сайт, и предоставить возможность его кастомизации темами.
Разумеется пока рассматривается только теория, практических задач не стоит.