gpt4 book ai didi

php - 单例继承

转载 作者:可可西里 更新时间:2023-11-01 00:54:03 24 4
gpt4 key购买 nike

这里解释单例: http://en.wikipedia.org/wiki/Singleton_pattern#PHP_5 .我想将单例类用作父类(super class),并将其扩展到其他应该是单例的类中。问题是,父类(super class)创建了自己的实例,而不是子类。知道如何让父类(super class)创建子类的实例吗?

 class Singleton {

// object instance
private static $instance;

protected function __construct() { }
public function __clone() { }
public function __wakeup() { }

protected static function getInstance() {
if (!self::$instance instanceof self) {
self::$instance = new self;

if(self::$instance instanceof Singleton)
echo "made Singleton object<br />";

if(self::$instance instanceof Text)
echo "made Test object<br />";
}
return self::$instance;
}

}


class Test extends Singleton {

private static $values=array();

protected function load(){
$this->values['a-value'] = "test";
}

public static function get($arg){
if(count(self::getInstance()->values)===0)
self::getInstance()->load();

if(isset(self::getInstance()->values[$arg]))
return self::getInstance()->values[$arg];

return false;
}
}

最佳答案

这是 PHP 的限制 - 父类无法确定静态调用其方法的子类的名称。

PHP 5.3 现在支持后期静态绑定(bind),这可以让您做您需要做的事,但要广泛使用还需要一段时间。看一些资料here

这里有几个类似的问题可能值得阅读以了解可能的解决方法,例如 this one

关于php - 单例继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/329390/

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