Другое полезное применение магических методов, особенно __get
и __set
и __toString
, - это шаблоны. Вы можете сделать свой код независимым от механизма шаблонов, просто написав простой адаптер, который использует магические методы. Если вы хотите перейти на другой шаблонизатор, просто измените только эти методы.
class View {
public $templateFile;
protected $properties = array();
public function __set($property, $value) {
$this->properties[$property] = $value;
}
public function __get($property) {
return @$this->properties[$property];
}
public function __toString() {
require_once 'smarty/libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->template_dir = 'view';
$smarty->compile_dir = 'smarty/compile';
$smarty->config_dir = 'smarty/config';
$smarty->cache_dir = 'smarty/cache';
foreach ($this->properties as $property => $value) {
$smarty->assign($property, $value);
}
return $smarty->fetch($this->templateFile);
}
}
Скрытым преимуществом этого подхода является то, что вы можете вкладывать Просмотр объектов друг в друга:
$index = new View();
$index->templateFile = 'index.tpl';
$topNav = new View();
$topNav->templateFile = 'topNav.tpl';
$index->topNav = $topNav;
А в index.tpl
вложенность выглядит так:
<html>
<head></head>
<body>
{$topNav}
Welcome to Foobar Corporation.
</body>
</html>
Все вложенные объекты View преобразуются в строку (точнее, HTML) на лету, как только вы echo $index;