2011-01-04 14 views
0

私は必要なものを手に入れません。varを必要とする静的メソッド

class config 
{ 

    private $config; 

    # Load configurations 
    public function __construct() 
    { 
     loadConfig('site'); // load a file with $cf in it 
     loadConfig('database'); // load another file with $cf in it 
     $this->config = $cf; // $cf is an array 
     unset($cf); 
    } 

    # Get a configuration 
    public static function get($tag, $name) 
    { 
     return $this->config[$tag][$name]; 
    } 
} 

私はこの取得しています:

Fatal error: Using $this when not in object context in [this file] on line 22 [return $this->config[$tag][$name];] 

を、私はこの方法でメソッドを呼び出す必要があります:config::get() ...

+0

静的関数はクラスのコンテキストで呼び出され、特定のインスタンスへの参照はありません。 – zzzzBov

答えて

2

public static function get

する必要があります

public function get

静的メソッドでは$thisを使用できません。

EDITED

私はこれを行うことができますが、私はそれがあなたのための最高のデザインだかはわかりません。

class config 
{ 

    static private $config = null; 

    # Load configurations 
    private static function loadConfig() 
    { 
     if(null === self::$config) 
     { 
      loadConfig('site'); // load a file with $cf in it 
      loadConfig('database'); // load another file with $cf in it 
      self::$config = $cf; // $cf is an array 
     } 
    } 

    # Get a configuration 
    public static function get($tag, $name) 
    { 
     self::loadConfig(); 
     return self::$config[$tag][$name]; 
    } 
} 
+0

get()メソッドをインスタンスなしでconfig :: get()として呼び出す必要があります。 – Shoe

+0

$ configプロパティは静的である必要があり、この場合、コンストラクタを持つことはできません。この例を参照してください。http://code.google.com/p/simple-php-framework/source/browse/trunk/includes/class.config.php?spec=svn199&r=199 –

1

問題は、静的メソッド内$this - 基準を使用する可能性を削除するなどの方法を宣言... Using $this when not in object contextだということです。

0

staticメソッド内には、クラスに属しているため、$thisという参照はありません。静的メソッドは静的メンバーにのみアクセスできるため、get()が静的​​メソッドであることが重要な場合は、$this->configを静的メンバーに、return self::$config[$tag][$name]とします。しかし、staticキーワードを使用すると、クラスのインスタンスがなくてもメソッドにアクセスできるようになります。get()を非静的にするか、クラスをシングルトンにすることをアドバイスします(使用方法によって異なります)。

関連する問題