[英]if an object property is another object, how do i access that object-property's property or method in smarty?
[英]How can I handle method calls to an object that is a private property of another object?
我有兩個類,Page類和Template類。 頁面具有與之關聯的模板,因此它存儲Template類的對象作為其屬性之一。
這是我的問題。 這些評估用於模板頁面。 如果要包含模板文件,則調用include $Template->view();
。 但是,由於此對象是Page對象的屬性,因此我必須調用include $Page->template->view();
。
這使我陷入兩個問題的中間。
$Page->template
變量保留為public,則它隨時可能被非Template對象覆蓋。 $Page->template
變量設為私有,然后我無法通過調用$Page->template->method();
來訪問它$Page->template->method();
。 從我的角度來看,唯一的選擇是Page類中的包裝方法,例如$Page->templateView();
。
我是唯一對此進行編碼的人,因此選項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();
為了進行封裝(為了隱藏Page類的'template'屬性),您應該
結果,您將獲得一個只讀屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.