Ein Problem über das ich schon häufiger gestolpert bin ist folgendes: Man will aus irgeneinem Grund eine abstrakte Singleton-Klasse definieren, sprich alle abgeleiteten Klassen sollen nur jeweils einmal instanziert werden.
In PHP 5.3 dank late static binding sehr einfach lösbar: Beispiel
In vorherigen Versionen ist es auf diese Weise nicht lösbar, die naive Herangehensweise wäre daher so etwas:
abstract class AbstractSingleton { protected function __construct() { } private function __clone() { } abstract public static function getInstance(); } class ConcreteSingleton extends AbstractSingleton { private static $instance; public static function getInstance() { if (empty(self::$instance)) { self::$instance = new ConcreteSingleton(); } return self::$instance; } }
was jedoch seit PHP 5.2 berechtigerweise einen E_STRICT
Fehler wegen “abstract static” wirft.
Continue reading “PHP 5.2 Abstract Singletons: “abstract public static function” issue”