$param = implode(',', $args); $this->_element->{$name}($param); } } class Template3 extends HtmlTemplate { protected $_element; public function __construct($ele, $html) { $this->_element = $ele; $this->_html = $html; $this->set('<ul>' . $this->_html . '</ul>'); } public function __call($name, $args) { $param = implode(',', $args); $this->_element->{$name}($param); } } $tpl1 = new Template1(); $tpl1->render(); $tpl1->set('Hello Decorator!'); $tpl1->render(); $tpl2 = new Template2($tpl1, 'Hello TPL 2'); $tpl2->render(); $tpl2->set('Hello TPL 2 agian'); $tpl2->render(); $tpl2 = new Template3($tpl1, 'Hello TPL 3'); $tpl2->render(); $tpl2->set('Hello TPL 3 agian'); $tpl2->render();