Das Singleton -Muster ist ein gemeinsames Designmuster, das sicherstellt, dass eine Klasse nur eine Instanz hat und globale Zugangspunkte bietet. In PHP beruhen traditionelle Implementierungen des Singleton -Modus auf statische Variablen und Methoden. PHP7 führte jedoch das neue Merkmal der anonymen Klasse ein und machte die Implementierung des Singleton -Modus flexibler und prägnanter.
Vor PHP7 wurde das Singleton -Muster normalerweise mit einem privaten Konstruktor und einer statischen GetInstance -Methode implementiert. Auf diese Weise stellt die statische Methode sicher, dass die Instanz der Klasse nur einmal erstellt wird. Zum Beispiel:
class Singleton {
private static $instance;
private function __construct() {}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
Die von PHP7 eingeführte anonyme Klassenfunktion ermöglicht es uns, Instanzen von Klassen zu erstellen, ohne sie zu benennen. Mit dieser Funktion können wir den Singleton -Modus problemlos implementieren. Durch die Verwendung von anonymen Klassen können wir nicht nur Instanzen erstellen, sondern auch mehr Initialisierungsvorgänge durchführen, wenn sie instanziiert werden.
$instance = new class {
private function __construct() {}
public function getInstance() {
return $this;
}
};
Bei anonymen Klassen können wir beim Instanziieren mehr benutzerdefinierte Logik- und Initialisierungsvorgänge hinzufügen, anstatt einfach ein Instanzobjekt zurückzugeben. Der folgende Code zeigt beispielsweise, wie das Singleton -Muster für die Anmeldung durch anonyme Klassen implementiert wird:
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
// Dies implementiert die Logik des Schreibens von Protokollen in Dateien
}
}
$instance = new class extends FileLogger {
private function __construct() {}
public function getInstance() {
return $this;
}
};
$instance->log('This is a log message.');
Durch die anonymen Klassen von PHP7 können wir ein flexibleres und skalierbareres Singleton -Muster implementieren. Anonyme Klassen vereinfachen nicht nur den Code, sondern bieten auch mehr benutzerdefinierte Funktionen wie Initialisierungsvorgänge, Schnittstellenimplementierung und Klassenvererbung. Diese Vorteile machen den PHP -Code prägnanter und einfacher zu warten und verbessern gleichzeitig die Wiederverwendbarkeit und Lesbarkeit des Codes.