如何获取父类实例?

时间:2014-08-24 06:37:53

标签: php

我有两个班级:

Singleton.php

namespace Core\Common;

class Singleton
{
    protected static $_instance;

    private function __construct(){}
    private function __clone(){}

    public static function getInstance() {
        if (null === self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
}

的config.php

namespace Core;

class Config extends Common\Singleton
{

    private $configStorage = array();    

    public function setConfig($configKey, $configValue)
    {
        $this->configStorage[$configKey] = $configValue;
    }

    public function getConfig($configKey)
    {
        return $this->configStorage[$configKey];
    }   
}

我的index.php

require_once 'common\Singleton.php';
require_once 'Config.php';
$config = \Core\Config::getInstance();
$config->setConfig('host', 'localhost');

但得到错误:"调用未定义的方法Core \ Common \ Singleton :: setConfig()"

因为我可以看到getInstance()返回我的Singleton类实例,但不是Config,我如何从Singleton返回Config实例?

1 个答案:

答案 0 :(得分:2)

您可以将getInstance更改为此:

public static function getInstance() {
    if (!isset(static::$_instance)) {
        static::$_instance = new static;
    }
    return static::$_instance;
}

selfstatic之间的区别突出显示为here

  

self指的是与新操作发生的方法相同的类。

     PHP 5.3中的静态静态绑定是指层次结构中您调用方法的任何类。

因此,它意味着动态地限制在扩展类中,因此在您的情况下new static引用Config类,使用self将始终静态引用Singleton } class。

工作example here