PHP OO:
Singleton-Class Template

php-logo-300x210

In letzter Zeit programmiere ich sehr oft objektorientiert auch für WordPress. Da WordPress eigentlich ein eher nicht objektorientiertes System ist, benutze ich regelmässig Singleton-Klassen. Ich habe mir dafür ein Template geschrieben, dass ich in den meisten Projekten so verwende und meine neuen Klassen nur noch davon ableiten muss.

abstract class Singleton {
  protected static $m_pInstance;

  final public static function singleton() {
    $class = self::getClass();
    if (isset(self::$m_pInstance[$class]) == false) {
      self::$m_pInstance[$class] = new $class;
    }
    return self::$m_pInstance[$class];
  }

  final public static function getClass() {
    return get_called_class();
  }
}

Der Vollständigkeit halber so leitet man eine Klasse ab:

class Meine_Neue_Klasse extends Singleton {
  ...
}

Um die Instanz der Klasse zu bekommen, einfach folgendes aufrufen:

$instance = Meine_Neue_Klasse::singleton();

1 Kommentar

  1. passend zur Überlegung:

    Why Singletons have no use in PHP

    http://gooh.posterous.com/singletons-in-php

    Ich nutze fast nur OOP, auch im Team mit WP, auch Namespaces zum Teil, aber der Artikel sollte in die Überlegung bei Verwendung von Singletons einfließen und WP ist dazu kein Grund.

    Ebenso sollte static überdacht werden:
    static considered harmful: http://kore-nordmann.de/blog/0103_static_considered_harmful.html

    “Static methods are faster!” but:
    This is, interestingly, often the first point you here when arguing about static. Until now I didn’t see any application where the difference is relevant in any way. For the case the microsecronds are really relevant to you you should probably think about using plain functions or switch to another language (maybe Assembler?).

    For me maintainability and the absence of a global state is far more important because it makes your code easier to extend, easier to read and thus easier to maintain.

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.