Общая модель такова:
Контроллер реализует __set()
, который добавляет переменные в представление:
class Controller {
.. snip ..
public function __set($key, $value) {
$this->_view->addVar($key, $value);
}
.. snip ..
}
Представление использует extract()
(или другой подходящий подход, такой как переменные-переменные) для создания переменных в области действия из этих значений:
class View {
private $_vars = array();
private $_templatePath;
public function __construct($templatePath) {
$this->_templatePath = $templatePath;
}
public function addVar($key, $value) {
$this->_vars[$key] = $value;
}
public function render() {
extract($this->_vars);
include $this->_templatePath;
}
}
Из-за того, как PHP обрабатывает область видимости, шаблон имеет доступ к переменным, созданным методом render()
представления.