Проблема состоит в следующем, решил сделать подключение нужных файлов шаблона через __get()
В процессе генерации HTML вызываю нужные файлы например $this->menu или $this->logo
Подключись соответствующие файлы menu.php или logo.php и все было хорошо так как там лежал только HTML, далее решил подключить файл в котором нужно было вывести переменную, а так как include производиться внутри функции __get() теряется области видимости этих самых переменных, как можно решить данную проблему?
class Templater {
public function render($file) {
include $file;
}
public function __get($name) {
return $this->$name;
}
}
$tmpl = new Templater();
$tmpl->name = 'Bob';
$tmpl->render('template.php');
внутри template.php: <? echo $this->name ?>
Я тут опустил всяческие проверки, оставил только суть.
Потому что обращение идет внутри одного класса через $this, если к примеру в конструкторе Templater объявить локальную переменную затем подключить файл данным способом, то переменная уже не будет прочитана в нем так как область отличается, идея сделать все переменные частью объекта интересная, но искал немного другой способ
Дмитрий Куликов: Эта идея стара как мир. Только реализуется обычно чуть иначе
private $data=array();
public function __get($name) {
if (isset($this->data[$name])) {
return $this->data[$name];
}
retun null;
}
public function __set($name, $val) {
$this->data[$name] = $val;
}
Но если ищете другой способ, то опишите его поподробнее, с примерами вашего кода. Посмотрим, что можно придумать :)
Да вот сейчас думаю реализовать следующим методом, Все переменные поместить в $data и дергать их через __get а подключение файлов которое было до этого реализовано через этот метод перенести на __call()
Ты просто поторопился, столкнулся с ошибкой, но пока не осознал её важности.
Никакое подключение через геттер, разумеется, работать не будет.
потому что фундаментальный принцип подключения шаблонов как раз и состоит в том, что кроме имени файла шаблона в него еще передаются и переменные.
И как ты собрался подключать через геттер шаблоны, лежащие в поддиректориях?
Ну я планирую сделать следующим образом, каждый шаблон является классом в конструктор которого передаются все необходимые переменные,далее шаблон разбит на подшаблоны (незнаю как правильно назвать) они и подключаются через геттер, папка шаблонов берется из названия текущего класса, название файла из переменной которую дергаю Get'ом
решил подключить файл в котором нужно было вывести переменную, а так как include производиться внутри функции __get() теряется области видимости этих самых переменных
Задача решается выносом модуля (функции) из шаблона уровнем выше: на уровень модулей.
Сейчас: шаблон->модуль
Нужно: шаблон, модуль
Тогда можно вывести нормально переменные: модуль->шаблон