#php #templates
#php #шаблоны
Вопрос:
Я пытаюсь узнать несколько вещей о PHP и написать свой собственный класс шаблонов. Но это просто неэффективно. Не пострадает ли производительность от этого? Если вы можете, посмотрите и посмотрите, что не так:
<?
class Template {
private $file, $template, $data;
public function __construct($file) {
$this->template = file_get_contents('views/wrapper.php');
$this->file = file_get_contents('views/'.$file.'.php');
}
public function __set($key, $val) { $this->data[$key] = $val; }
public function __get($key) { return $this->data[$key]; }
private function replaceAll() {
foreach($this->data AS $key => $val)
$this->template = str_replace('@'.$key, $val, $this->template);
$this->template = str_replace('{LOAD}', $this->file, $this->template);
}
public function render() {
$this->replaceAll();
echo $this->template;
}
}
?>
Я хочу использовать оболочку, которая содержит нижний колонтитул заголовок, который содержит боковую панель / навигацию. Поэтому мне нужно как-то динамически установить там активный класс, а затем я хочу иметь возможность загружать представление на основе конструктора или чего-то подобного. Это то, что я делаю.. хорошо?
Комментарии:
1. Собственно, зачем вы вообще пишете класс шаблонов? : P
2. Магические методы в будущем очень затруднят отладку.
3. в основном эксперименты @boltclock. Я работаю над небольшим проектом, и мне сказали, что лучше всего использовать шаблоны, а не синглтоны и другое использование классов .. Lol
Ответ №1:
_функции _get и __set работают очень медленно. замена строк также происходит довольно медленно. почему вы создаете свой шаблон таким образом? что, если вы сделали что-то более похожее на это?
класс шаблонов
class template {
protected $templateFile;
public function __construct($template_file) {
$this->templateFile = $template_file;
}
public function render() {
require($this->templateFile);
}
}
файл шаблона
<html>
<p><?= $this->someProperty ?></p>
</html>
использование
$view = new template($template_file_path);
$view->someProperty = 'hello world';
$view->render();
единственным недостатком было бы то, что тот, кто пишет шаблоны, также будет иметь доступ к написанию PHP.
Комментарии:
1. Я переписал его здесь: github.com/OutThisLife/Time-Journal/blob/master/classes /… — все еще используется get/set для динамических элементов. мысли?
Ответ №2:
Вы хотите, чтобы ваш анализатор шаблонов был универсальным, поэтому никаких статических файлов, таких как ваш wrapper.php ! Если вы хотите взглянуть на создание простого анализатора шаблонов, я рекомендую это:
http://www.broculos.net/en/article/how-make-simple-html-template-engine-php