PHP templating с str_replace?

Я думаю, что основным принципом системы шаблонов PHP является замена строк, не так ли? Так что я могу просто использовать строку для хранения моего кода шаблона html, например

$str_template = "<html><head><title>{the_title}</title><body>{the_content}</body></html>" 

и в следующем коде просто str_replace, чтобы вставить данные в мою переменную шаблона, как

 str_replace( $str_template, '{the_title}', $some_runtime_generated_title ); str_replace( $str_template, '{the_content}', $some_runtime_generated_content ); 

затем, наконец,

 echo $str_template; 

Будет ли это, надеюсь, сделать весь процесс передачи переменных немного быстрее? Я знаю, что это может быть странный вопрос, но кто-нибудь пробовал это?

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

Вы спросите, будет ли это «сделать процесс передачи переменной в несколько быстрее». Быстрее чем? Вы сталкиваетесь с проблемами производительности с тем, что вы делаете прямо сейчас?

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

Вы также можете использовать массивы с str_replace и, следовательно, сделать еще много замен с помощью одного вызова функции, подобного этому

 str_replace(array('{the_title}', '{the_content}'), array($title, $content), $str_template); 

Система, с которой я работаю, – это Spoon Library , их система шаблонов довольно прочная, включая скомпилированные шаблоны, которые являются огромным приростом производительности.

Я бы создал парсер, который разбивает код на его токены (переменные и обычный текст). В качестве простого подхода вы можете использовать функцию pre_split для этого:

 $tokens = preg_split('/(\{[^\}]+\})/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

Теперь вы можете повторять токены и проверять, является ли это переменным или обычным текстом:

 foreach ($tokens as $token) { if ($token[0] === '{' && $token[strlen($token)-1] === '}') { // token is a variable } else { // token is plain text } } 

Преимущество такого подхода заключается в том, что переменные не заменяются в тексте, который уже был заменен. Так:

 $foo = '{bar}'; $bar = 'bar'; $template = 'Lorem {foo} {bar} sit amet …'; 

Здесь текст будет заменен на Lorem bar {bar} sit amet … и не Lorem bar bar sit amet … как это было бы с вашим кодом, когда {bar} заменяется после {foo} .

Это хорошая идея использовать механизм шаблонов.

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

вы можете использовать html-файлы, содержащие php-теги для вывода (например, <?=$var?> ) и только петли. включите их через «include» в ваш php-код. Это намного быстрее.

взгляните на smarty . это мой любимый механизм шаблонов для php. У smarty есть много хороших функций, таких как кеширование, и оно расширяется плагинами.

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

Конечно, вам нужно иметь аргументы в правильном порядке. str_replace()

Также может быть хорошей идеей разместить шаблоны в собственном файле, а не хранить их в строке. Затем просто прочитайте их через file_get_contents() или аналогичный.

Если вы выполняете только расширение переменной, вы можете:

 $str_template = "<html><head><title>$the_title</title><body>$the_content</body></html>"; 

Он также будет работать …
Некоторые люди задаются вопросом, почему существует система шаблонов, когда PHP уже является системой шаблонов …

Конечно, есть и другие преимущества для этих систем, такие как более безопасный доступ к переменным, возможно, легче обрабатывать дизайнеры (или генерировать с помощью инструментов), ограничение логики в слое представления … Что является общей критикой тяжелого шаблона таких как Smarty, с такой логикой, что вы можете почти написать с ней еще одну систему шаблонов! 😉

Некоторые системы шаблонов, такие как Savant , занимают среднюю дорогу. 🙂

Вы просто не можете сделать шаблон таким образом.
Шаблон реальной жизни потребует заполнения не только простых переменных, но также нескольких структур управления или, по крайней мере, некоторых блоков для управления определенными областями страницы (например, для создания циклов).
Таким образом, вы не можете создать шаблон с помощью str_replace. Также потребуются некоторые регулярные выражения и сложный парсинг.

Таким образом, лучше придерживаться механизма шаблонов, который уже в вашем распоряжении – самого PHP!

Фактически, ответ «Ваше здравое чувство» является правильным. Вы можете использовать PHP для использования текущего контекста и замены переменных. Вместо записи вывода вы можете сделать ob_start (), чтобы удерживать его в буфере и получать замененное содержимое. Легко и элегантно!

в основном идея состоит в том, что один, но шаблон – это нечто большее, например RainTPL – WYSIWYG, потому что он заменяет относительные пути в шаблоне с помощью путей сервера, таким образом вы создаете свой шаблон на локальном компьютере и работает на сервере без необходимости изменения img / css.