У меня есть своего рода файл шаблона, который можно назвать filename.php:
<h1>
<?= $test . ' world'; ?>
</h1>
<p>
Some text
</p>
Тогда у меня есть функция в файле index.php, которая выглядит так?
<?php
function test($args) {
$test = $args;
include 'filename.php';
}
test('Hello');
test('Hello');
test('Hello');
Этот код работает. Он выводит включенные данные 3 раза.
Я также могу использовать буферизация вывода, чтобы получить вывод в виде строки, если я хочу. Однако это не совсем то, что я хочу.
Проблема
Я не могу придумать, как нужно только один раз включить filename.php (теперь он загружается 3 раза). Поскольку он принимает аргументы, он не может быть возвращен в виде строки. Думаю, его нужно вернуть как анонимную функцию. Тогда я мог бы буферизовать свой шаблон и по-прежнему использовать его с новыми значениями.
Приветствуются любые творческие идеи.
Если вам нужен язык шаблонов, я бы выбрал испытанный. Однако вы, конечно, можете прочитать содержимое файла filename.php и сделать eval(' ?>' . $file_contents . '<?php ');, см. 3v4l.org/70dgu :-)
@misorude В реальном мире они могут загружаться 100 раз.
@jeroen Я слышал, что eval - это плохо и опасно, но я узнаю об этом больше, спасибо! знак равно
Ну, вы хотите оценивать ваш php-скрипт как php, что же делает и include ...
@misorude, проблема также может заключаться в том, что настоящий файл шаблона очень большой ...
На самом деле это не проблема. Шаблон (если это шаблон) просто показывает данные. Если вы показываете 100 тысяч строк данных - это не проблема шаблона, это проблема логики приложения - вы должны использовать разбиение на страницы, разогревать кеш или что-то еще. Итак, нет ничего необычного в том, чтобы включать файл столько раз, сколько вам нужно.






Думаю, лучше создать в ней строку шаблона и значения
str_replace/preg_replace. Но даже в шаблонизаторах вы можете создавать подшаблонincludeстолько раз, сколько вам нужно.