Suchen
Inside Wiki
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Singleton

 
Das Singleton-Pattern verhindert das mehrfache Instanzieren einer Klasse. Von einer Klasse gibt es nur eine Instanz, welche den globalen Zugriffspunkt darstellt.

 

OOP Design Pattern - Inhalte

Das Pattern


Hier eine allgemeine Version des Singleton Patterns:

PHP Quellcode:
class Singleton
{
    private static $instance = null;
   
    private function __construct()
    {}
   
    private function __clone()
    {}

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

        return self::$instance;
    }
}

Beschreibung des Patterns


Zuallererst definieren wir die Klasse wie gewohnt. Wir reservieren eine private statische Eigenschaft $instance, die, sofern das Objekt instanziert wird, eine Referenz auf das Objekt beinhaltet. Nun müssen wir den Konstruktor als privat definieren, was dazu führt, dass man kein Objekt auf direktem Weg erstellen kann, da dies zu einer Fehlermeldung führen wird. Um Schlaufüchse davon abzuhalten, eine neue Instanz über Umwege, nämlich das Klonen des Objekt, zu erhalten markieren wir auch die magische Methode __clone, die das Klonverhalten beschreibt, als privat.

Das Objekt auf natürlichem Weg zu erstellen ist nun nicht mehr möglich. Deshalb müssen wir jetzt eine Möglichkeit bieten eine Instanz zu erstellen. Dies geschieht mit der Methode getInstance(). Der Name der Methode hat sich in großen Projekten etalbiert. Hier prüfen wir, ob bereits eine Instanz in der statischen Eigenschaft $instance hinterlegt ist, und erstellen ggf. ein neues Objekt.

Zu guter Letzt geben wir die Referenz auf das Objekt zurück.

Verwendung



Die Verwendung könnte so aussehen:
PHP Quellcode:
<?php

$first = Singleton::getInstance();
$second = Singleton::getInstance();

/**
 * $first und $second enthalten nun eine Referenz auf das gleiche Objekt.
 */


Hinweis


Es sei darauf hingewiesen, dass das Singleton-Pattern oft fehl am Platz ist. Man sollte die Klasse in einem größeren Kontext sehen. So ist es z.B. durchaus sinnvoll nur einen Front Controller (Komponente im MVC Ansatz) zu haben, aber unumstritten falsch Datenbankklassen als Singleton zu implementieren, da es nicht auszuschließen ist, dass man in der Zukunft weitere Datenbankverbindungen benötigt.

Ebenfalls wird das Singleton Pattern oft als komfortable globale Variable angesehen. Vor der Implementierung eines Singleton sollte man sich sicher sein, dass eine eventuelle Mehrfachverwendung des Objektes die Applikation behindert oder negativ beeinträchtigt.

Kritik


Das Singleton ist das wohl umstrittenste Design Pattern überhaupt. Bildet Eure eigene Meinung!
Z.B. Lesenswert: Root Cause of Singletons

« Vorheriges Kapitel   OOP Design Pattern
  Nächstes Kapitel »

Mitwirkende: dsentker, pecos, combie, puritania
Erstellt von puritania, 12.02.2008 am 18:17
Zuletzt bearbeitet von dsentker, 21.11.2011 am 23:40
10 Kommentare , 7130 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klassen, Singleton-Pattern TheUniqueOne PHP 4 26.06.2007 16:34
singleton vs. statisch smove PHP 7 20.01.2007 12:33
Singleton db-class slayter PHP 12 03.01.2007 21:32
Pattern oder nicht pattern? das ist hier die Frage! sopinon PHP 5 23.07.2005 17:32


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:13 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC