2011-07-11 4 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答えがグローバル変数を使うほど悪いとは思わない。私はそれをupvoteので、それは同じ価値のものとして扱われません。 – Tadeck