2012-01-05 8 views
0

私は自分のライブラリの1つにグローバルコンテキスト変数を作成しようとしていますが、変数を作成する方法を理解できないようです。以下は、私のコードのサンプルです:コンテキスト変数php

class test{ 
    function tester(){ 
     echo context::getContext(); 
     echo '<br />'; 
     context::setContext(2); 
     echo context::getContext(); 
     echo '<br />'; 
     new test2(); 
    } 
} 
class test2{ 
    public function __construct(){ 
     echo context::getContext(); 
    } 
} 
class context{ 
    protected static $contextNum = 0; 
    public function getContext(){ 
     return isset($this->contextNum) ? $this->contextNum : 0; 
    } 
    public function setContext($num){ 
     $this->contextNum = $num; 
    } 
} 

これはエコーを終了します。それが出エコーよう

0 
2 
0 

は、どのように私はそれを行うことができますか?

0 
2 
2 

答えて

0

変更

$this->contextNum = $num; 
// and 
return isset($this->contextNum) ? $this->contextNum : 0; 

self::$contextNum = $num; 
// and 
return isset(self::$contextNum) ? self::$contextNum : 0; 

使用静的メソッドsetContext()ための修飾子とgetContext()

はまた、私はあなたがcontext__construct()方法にthrow new Exception('Can\'t create instance of this class')を追加するために助言します。

+0

私は実際にはコンテキストクラスのコンストラクトを持っていますが、この例では適切ではなかったため、それを含めませんでした。文脈上のクラスのインスタンス化を許可しない理由があるだろうか? –

+0

ああ、私はそれをすべて静的にしたいとは思っていますが...次に、静的な修飾子をメソッドに設定することについてのアドバイスを無視してください。 – devdRew

+0

この場合、静的メソッドを静的にすることには、静的ですか? –

0

これを試してください:self::$contextNumを静的変数としてそれをアクセスするために使用されている間

class context(){ 
    protected static $contextNum = 0; 
    public function getContext(){ 
     return isset(self::$contextNum) ? self::$contextNum : 0; 
    } 
    public function setContext($num){ 
     self::$contextNum = $num; 
    } 
} 

$this->contextNumは、インスタンス変数(クラスcontextのインスタンスに存在するすなわち、1種)としてcontextNumにアクセスするために使用されます。

関連する問題