22 Stimmen

Abstrakte Singleton-Klasse erweitern

Wenn Sie eine Fabrikklasse haben, die neue Objekte irgendeiner Art erstellt, und diese Faktorklasse ist ein Singleton, wie dies:

class Database_Factory extends Base_Factory {
    private static $factory;
    private $objects = array();

    public function __get($profile) {
        // check for object and return it if it's created before
    }

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

Derselbe Code wird immer dann wiederholt, wenn ein Objekt eine eigene Fabrik benötigt. Also habe ich beschlossen, diese Fabrikklasse abstrakt zu machen und nur spezifische Routinen für jede Fabrik zu implementieren. Aber PHP erlaubt es nicht, eine abstrakte Klasse zu instanziieren.

abstract class Base_Factory {
    public static function getInstance(){
        if (!self::$factory)
            self::$factory = new self();
        return self::$factory;
    }
}

Schwerwiegender Fehler: Die abstrakte Klasse Base_Factory kann nicht instanziiert werden

Was würden Sie tun?

-2voto

Shane Punkte 667

Sie könnten prüfen, ob die Klasse, die die Funktion aufruft, nicht die Base_Factory ist.

if(__CLASS__!='Base_Factory')

Dann verwenden Sie $this statt self, um auf das aktuelle Objekt statt auf die aktuelle Klasse zu verweisen.

if (!$this->factory)
        $this->factory = new self();
    return $this->factory;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X