2009-08-17 53 views
1

我在重新格式化我的課(如下圖所示)的過程 - 我認爲我做了我的類相同的可見性設置一切的錯誤,而性能確實應該私人和getter/setter應該在大多數情況下公開。塞特斯/吸氣劑,能見度[OOP] PHP中

要抓住一個屬性,我只是做$ path-> propertyname,但我注意到它更具實用性,有setter/getters。如果我要實施獲得者,我應該爲每個財產製定一個,還是我可以爲整個班級制定一個?所以例如說我想獲得控制器的名稱...

public function getController() { 
    return $this->controller; 
} 

而這將返回控制器私有財產?有一個更通用的getter/setter,或者甚至是一個混合方法,爲我獲取套是否很常見?

這裏的類結構(只是屬性/方法):http://php.net/overload

有兩大神奇的方法__get()__set()這可能會做的正是你想要的東西:

class urlParser { 

    public static $url  = ''; 
    public static $controller = ''; 
    public static $baseController = ''; 
    public static $urls  = ''; 
    public static $template  = ''; 
    public static $captures  = ''; 
    public static $contentXML = ''; 

    function __construct($urls) { 

     $this->urls = $urls; 

     $this->baseController = $urls['default']; 

     $this->get_url(); 
    } 

    public function get_url() { 
     // sets following properties: 
     // url, template, controller, contentXML, baseController 
    } 
} 
+1

你可以更新你的問題,使問題更明顯嗎?沒有人會在知道您要求的內容之前查看所有代碼。 – Blixt 2009-08-17 06:47:43

+0

好的 - 更新我的問題,更簡單一些。 – 2009-08-17 12:26:03

回答

1

在你的情況下,你有setter和getters是毫無意義的。

如果你必須做除了返回控制器之外的任何東西,你不需要getter,因爲如果你不做任何事情就不需要setter擁有財產後,它已被設置。

如果你真的想要getter和setter,你可以對所有屬性使用__get和__set魔術方法。但如果情況如上所述那完全沒有意義。

0

PHP對象有一些不錯的magic methods(雖然我沒有使用它們全部,因爲它可能會令人困惑)。您可能正在尋找的是__get()__set()。如果您選擇將數據字段設置爲私有的(如果您的其他代碼沒有正確訪問字段,那麼您仍然必須重構所有代碼)。以這種方式進行此操作有助於使代碼變得更好,更輕鬆維護。

雖然,我通常會盡量爲每個私有數據域getter和setter,因爲你可以很容易地看到每個領域的任何驗證。加上我更多的是Java開發人員比PHP開發的。