簡體   English   中英

如何處理對另一個對象的私有屬性的對象的方法調用?

[英]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();

這使我陷入兩個問題的中間。

  1. 如果我將$Page->template變量保留為public,則它隨時可能被非Template對象覆蓋。
  2. $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'屬性),您應該

  1. 私有財產
  2. 添加get-method返回屬性值
  3. 不要添加put-method以不允許更新屬性值

結果,您將獲得一個只讀屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM