我有两个班级:
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实例?
答案 0 :(得分:2)
您可以将getInstance
更改为此:
public static function getInstance() {
if (!isset(static::$_instance)) {
static::$_instance = new static;
}
return static::$_instance;
}
self
和static
之间的区别突出显示为here:
self指的是与新操作发生的方法相同的类。
PHP 5.3中的静态静态绑定是指层次结构中您调用方法的任何类。
因此,它意味着动态地限制在扩展类中,因此在您的情况下new static
引用Config
类,使用self
将始终静态引用Singleton
} class。
工作example here。