我有两个类,Page类和Template类。页面有一个与之关联的模板,因此它将Template类的一个对象存储为其中一个属性。
这是我的问题。这些calsses用于模板页面。如果我想要包含模板文件,我会调用include $Template->view();
。但是,由于此对象是Page对象的属性,因此我必须调用include $Page->template->view();
。
这使我处于两个问题的中间。
$Page->template
变量保留为公共状态,则可以使用非模板对象的任何位置覆盖该变量。$Page->template
变量设为私有,我无法再通过调用$Page->template->method();
来访问它。从我的观点来看,唯一的选择是Page类中的包装器方法,例如$Page->templateView();
。
我是唯一一个编码的人,所以选项1是可以接受的,因为我不会覆盖它,但我想知道是否有更好的方法。如果只有那些可以公开使用但未公开修改的属性。
处理此类事物还有其他选择吗?
我是在想这个还是想念一些东西?
答案 0 :(得分:1)
你可以:
a)创建一个公共访问器方法并像这样调用它:
class Page
{
private $template;
public function template()
{
return $this->template();
}
}
// call it like this
$page_object->template()->method();
b)如果您不喜欢使用“template()”而不是“template”,您可以利用魔术方法:
class Page
{
private $mTemplate;
public function __get($name)
{
if ($name == 'template')
return $this->mTemplate;
}
}
// call it like this
$page_object->template->method();
答案 1 :(得分:0)
为了封装(为了隐藏Page类的模板属性)你应该
因此,您将获得一个只读属性。