Sihirli yöntemlerin bir başka yararlı uygulama, özellikle __get
ve __set
ve __toString
şablonları. Sadece sihirli yöntemler kullanan basit bir adaptör yazarak şablon motoru kod bağımsız yapabilirsiniz. Eğer sadece sadece bu yöntemleri değiştirmek, başka bir şablon motoru taşımak istiyorum.
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);
}
}
Bu yaklaşımın gizli yararı yuva görüntüle birbiri içine nesneleri olabilir:
$index = new View();
$index->templateFile = 'index.tpl';
$topNav = new View();
$topNav->templateFile = 'topNav.tpl';
$index->topNav = $topNav;
Ve index.tpl
olarak, yuvalama gibi görünüyor:
<html>
<head></head>
<body>
{$topNav}
Welcome to Foobar Corporation.
</body>
</html>
Tüm iç içe nesneleri görüntüleme kısa sürede size echo $index;
, sinek (HTML kesin olmalıdır) dizeye dönüştürülür alır