Erweiterung Singleton in PHP

Arbeite ich in einer web-app-framework, und ein Teil davon besteht aus einer Reihe von Dienstleistungen, die alle implementiert als Singleton. Sie alle erweitern die Service-Klasse, wo die singleton-Verhalten implementiert wird, suchen so etwas wie dieses:

class Service {
    protected static $instance;

    public function Service() {
        if (isset(self::$instance)) {
            throw new Exception('Please use Service::getInstance.');
        }
    }

    public static function &getInstance() {
        if (empty(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

Nun, wenn ich eine Klasse namens FileService umgesetzt wie diese:

class FileService extends Service {
    //Lots of neat stuff in here
}

... der Aufruf der FileService::getInstance() wird nicht die Ausbeute eines FileService Beispiel, wie ich es mir vorstelle, aber ein Service-Instanz. Ich nehme an, das problem hier ist das "selbst" - Schlüsselwort in der Service-Konstruktor.

Gibt es eine andere Möglichkeit das zu erreichen, was ich hier will? Der singleton-code nur ein paar Zeilen, aber ich möchte trotzdem zu vermeiden, dass jede code-Redundanz, Wann immer ich kann.

Schreibe einen Kommentar