Шаблонизатор с функциями

Пишу свой шалонизатор, но столкнулся с проблемой вызова функций в шаблонах
Приведу пример:
...
'@\[\+rand\(([0-9]+)-([0-9]+)\)\+\]@si' => rand(intval("$1"), intval("$2")),
...

это один из элементов массива для замены.
Здесь при нахождении в шаблоне конструкции вида: [+rand(4-10)+] должно выводится случайное число от 4 до 10.
Никак не могу заставить работать. При преобразовании под масок к числу, они становятся 0.
Спасибо.
  • Вопрос задан
  • 3253 просмотра
Решения вопроса 1
Все работает:
echo preg_replace_callback(
  '@\[\+rand\(([0-9]+)-([0-9]+)\)\+\]@si' ,
  function($m){return rand(intval($m[1]), intval($m[2]));},
  'test [+rand(4-10)+] test');
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А почему бы не использовать лексер/парсер? Скомпилировать шаблон в нативный код и уже его выполнять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы