2011-01-04 4 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

Проблема заключается в том, что вы Using $this when not in object context ... Объявив метод как статический исключает возможность использовать $this -reference внутри метода.

0

Нет ссылки $this в статических методах, относящихся к классу. Статические методы могут получить доступ только к статическим элементам, поэтому, если важно, что get() является статическим методом, сделайте $this->config статическим членом и return self::$config[$tag][$name]. Однако статическое ключевое слово делает методы доступными без экземпляра класса, и я бы посоветовал либо сделать get() нестатический, либо сделать класс одиночным (в зависимости от того, как вы хотите его использовать).

Смежные вопросы