gpt4 book ai didi

php - 如何获取父类实例?

转载 作者:搜寻专家 更新时间:2023-10-31 21:09:08 25 4
gpt4 key购买 nike

我有两个类:

单例.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;
}
}

配置.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 实例?

最佳答案

您可以将 getInstance 更改为:

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

selfstatic 的区别突出显示here :

self refers to the same class whose method the new operation takes place in.

static in PHP 5.3's late static bindings refers to whatever class in the hierarchy which you call the method on.

所以这意味着动态绑定(bind)到扩展类,因此 new static 在你的例子中指的是 Config 类,使用 self将始终静态引用 Singleton 类。

工作 example here .

关于php - 如何获取父类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com