Синглтон поясняется здесь: http://en.wikipedia.org/wiki/Singleton_pattern#PHP_5. Я хочу использовать класс singleton как суперкласс и расширять его в других классах, которые должны быть одноточечными. Проблема в том, что суперкласс делает экземпляр сам по себе, а не подкласс. Любая идея, как я могу заставить Суперкласс создать экземпляр подкласса?Синглтонское наследие
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;
}
}
На самом деле, есть хак называется «позднего статического связывания», который идет в 5.3, но не означает, что это хорошая идея использовать его. – troelskn 2008-11-30 22:28:04