class Template {
protected $_template;
protected $_data = array();
public function __construct($template, array $data = NULL)
{
$this->_template = $template;
if ($data !== NULL)
$this->_data = $data;
}
public function __toString()
{
return (string)$this->render();
}
public function render()
{
extract($this->_data);
require $this->_template;
}
}
Проблема в том что если в $data передан другой объект этого же класса с другим шаблоном (то есть в главный шаблон сайта я вставляю с помощью переменной блок с другим шаблоном) и при этом к массиву $this->_data я применю функцию htmlspecialchars то в браузер выводится сначала шаблон из блока, а ниже уже главный шаблон. Если уберу htmlspecialchars то все работает как надо. Я как понял что это происходит из за магической функции __toString, она когда объект преобразует в строку почему то автоматом выводит шаблон в браузер, но это происходит только когда к массиву $this->_data применяется функция htmlspecialchars.