Пытаюсь написать класс шаблонов PHP — это кажется неправильным

#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