需要变量的静态方法

时间:2011-01-04 20:19:59

标签: php static

好的,我坚持这个,为什么我不能得到我需要的东西?

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 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分:1)

问题在于您 Using $this when not in object context ...将方法声明为静态会删除在方法中使用$this - 引用的可能性。

答案 2 :(得分:0)

静态方法中没有$this引用,因为它们属于类。静态方法只能访问静态成员,因此如果get()是静态方法很重要,请使$this->config成为静态成员并return self::$config[$tag][$name]。但是,static关键字使得方法可以在没有类实例的情况下访问,我建议将get()设置为非静态,或者使类成为单例(取决于您希望如何使用它)。