PHP, обрабатывающий по шаблону с 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; 

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

11
задан bpeterson76 22 February 2011 в 23:05
поделиться

6 ответов

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

Вы спрашиваете, "сделает ли это целый переменный передающий процесс немного быстрее". Быстрее, чем какой? Вы сталкиваетесь с проблемами производительности с чем-то, что Вы делаете прямо сейчас?

4
ответ дан 3 December 2019 в 06:48
поделиться

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

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

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

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

6
ответ дан 3 December 2019 в 06:48
поделиться

Я создал бы синтаксический анализатор, который взламывает код в, он - маркеры (переменные и простой текст). Как свободный доступ, Вы могли использовать 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}.

3
ответ дан 3 December 2019 в 06:48
поделиться

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

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

можно использовать файлы HTML, содержащие теги PHP для вывода (как <?=$var?>) и циклы только. включайте их через, "включают" в Ваш код php. это намного быстрее.

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

если Вы понимаете, что немец смотрит здесь. существует маленькое введение в присяжного острослова.

2
ответ дан 3 December 2019 в 06:48
поделиться

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

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

1
ответ дан 3 December 2019 в 06:48
поделиться

Если Вы делаете только переменное расширение, можно сделать:

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

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

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

Некоторые шаблонные системы, как Ученый, берут среднюю дорогу.:-)

1
ответ дан 3 December 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: