PHP: il design pattern Singleton

PHP: il design pattern Singleton

Il design pattern Singleton è uno dei design pattern più utilizzati in programmazione. Esso si applica quando si vuole garantire che una classe abbia una sola istanza, e che tale istanza sia accessibile globalmente.

In PHP, è possibile implementare il design pattern Singleton utilizzando una combinazione di metodi e proprietà statiche. Innanzitutto, definiamo la classe Singleton come segue:


class Singleton {
  private static $instance = null;

  private function __construct() {}

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

In questa implementazione, abbiamo dichiarato una proprietà statica $instance che tiene traccia dell'istanza unica della classe Singleton. Il costruttore della classe è privato, il che significa che non è possibile creare istanze della classe utilizzando la parola chiave new. Al suo posto, abbiamo definito un metodo statico getInstance() che restituisce l'istanza unica della classe. Il metodo getInstance() controlla se l'istanza esiste già, e se non esiste la crea.

Per utilizzare la classe Singleton, è sufficiente richiamare il metodo getInstance() come segue:


$singleton = Singleton::getInstance();

L'istanza di Singleton verrà creata la prima volta che viene chiamato getInstance(), e tutte le chiamate successive restituiranno l'istanza già esistente.

Inoltre, è importante notare che la classe Singleton è thread-safe, il che significa che più thread possono accedere alla stessa istanza senza creare conflitti.

In conclusione, l'implementazione del design pattern Singleton in PHP è semplice ma potente. Utilizzando una combinazione di metodi e proprietà statiche, è possibile garantire che una classe abbia una sola istanza e che tale istanza sia accessibile globalmente. Questo pattern è particolarmente utile quando si deve limitare il numero di istanze di una classe, ad esempio quando si deve accedere a risorse costose come connessioni al database.

Torna su