2010-12-04 12 views
0

例如,我的應用程序正在使用User對象的實例,而其他不同的對象必須訪問某些屬性和方法。這些對象實例化其他對象,而這些對象又必須訪問用戶。管理這個最好的方法是什麼?在實例化這些新對象時將User對象作爲參考傳遞?PHP:如果許多對象使用相同對象的實例 - 通過它的有效方法是什麼?

這裏的例子這是如何做到現在:

 
class App { 
    private $user; 
    private $controller; 

    public function __construct() { 
    $this->user = new User(); 
    $this->controller = new Controller(); 
    $this->controller->setUser(& $this->user); 
    } 
} 

這是做正確的方式?

編輯:有沒有辦法讓用戶實例全局變量?

+0

PHP5默認按引用傳遞對象,所以不需要做明確 – 2010-12-04 17:16:07

+0

看看單例模式。也許它在這裏更合適。 – KingCrunch 2010-12-04 17:16:49

回答

1

有沒有辦法讓User實例成爲一個全局變量?

這聽起來像一個單身將是有益的:

class User 
{ 
    private static $instance; 

    private function __construct() { } 

    public function instance() 
    { 
    return self::$instance ? self::$instance : (self::$instance = new self()); 
    } 
} 

$user = User::instance(); 

基本上任何需要用戶,只需調用User::instance()代替new User()。它們都將在對象的同一個實例上運行,所以這隻適用於在整個腳本持續時間內User對象表示相同的數據。

更新

與您的意見「沒有,有可能爲一個用戶執行其他用戶操作」,那麼這種模式是不適用於每個使用。

聽起來像你只需要將$user對象一起傳遞給任何需要它的人。 (當然,你仍然可以使用一個單獨代表身份驗證的用戶。)

2

只是爲了讓我的意見建議,回答

您可以實現單件模式

class User { 
    protected static $instance = null; 
    protected function __construct() { /* disable external instanciation */ } 
    private function __clone() { /* disable clone */ } 
    public static function getInstance() { 
     if (is_null(self::$instance)) { 
      self::$instance = new self(); 
     } 
     return self::$instance; 
    } 
} 

這裏是值得閱讀:)

http://en.wikipedia.org/wiki/Singleton_pattern

相關問題