2011-07-11 15 views
2

,我有我的設置是這樣的:如何通過在PHP類之間的變量,不會因此延長

class System extends mysqli{ 

    function __construct(){ 
     //user variables such as $this->username are returned here 
    } 

} 

$sys = new System(); 

class Design{ 

    function setting(){ 
     echo $sys->username; 
    } 

} 

$design = new Design(); 

然而,設計類不呼應的用戶名。我可以在設計類之外回顯用戶名,但不能在設計類中使用。我怎麼去解決這個問題?

回答

5

其他人的答案是好的,但你可以注入的依賴對系統非常漂亮:

class Design{ 

    private $sys; 

    public function __construct(System $sys) { 
     $this->sys = $sys; 
    } 

    function setting(){ 
     echo $this->sys->username; 
    } 
} 
$sys = new System; 
$design = new Design($sys); 
+0

+1正確的依賴注入 –

+0

嗯,它仍然不適合我。我沒有得到任何變量,並且System類中的變量被設置爲public。 – Jack

+0

我需要看你的代碼來幫助你 –

1

您的Design類無法訪問$sys變量。

你必須做這樣的事情:

class System extends mysqli{ 

    function __construct(){ 
     //user variables such as $this->username are returned here 
    } 

} 

class Design{ 

    private $sys; 

    function __construct(){ 
     $this->sys = new System(); 
    } 

    function setting(){ 
     echo $this->sys->username; 
    } 

} 

$design = new Design(); 
+0

這是最初我曾嘗試,並沒有一些奇怪的原因工作。 – Jack

-1

這是因爲$sys是不是在設計類的範圍。

function setting(){ 
    $sys = new System(); 
    $sys->username; 
} 

應該工作,假設username是公開的。

+1

+1我不認爲你的答案和使用全局變量一樣糟糕。我贊成它,所以它不被視爲具有相同的價值。 – Tadeck