Статические методы, требующие вар - PullRequest
0 голосов
/ 04 января 2011

Хорошо, я застрял на этом, почему я не получаю то, что мне нужно?

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() ...

Ответы [ 3 ]

2 голосов
/ 04 января 2011

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];
    }
}
1 голос
/ 04 января 2011

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

0 голосов
/ 04 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...