PHPBlog.it

Pattern in PHP: Singleton

L’argomento che andremo a trattare oggi è un pattern di programmazione: Singleton. Questo pattern viene utilizzato per fornire un unico punto di accesso ad una classe, ed è utile soprattutto in logger, registri globali, e altri tipi di oggetti dove è importante avere un’unica istanza.

Ecco subito un esempio:

class Logger
{

  private static $instance;

  private function __construct()
  {}

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

  }

  public function log ($message)
  {
  /*   ..............    */
  }

}

Con questo esempio ho creato la classe per il log di un’applicazione. Il “trucco” sta nel definire una variabile privata statica di nome “instance” (nel mio caso), e definire il costruttore come un metodo privato. In questo modo non sarà possibile instanziare la classe dall’esterno, ma solo dall’interno. Questa instanziazione avviene nel metodo statico pubblico getInstance(), dove se esiste $instance viene restituita subito, altrimenti si procede alla creazione dell’oggetto.

L’utilizzo di questa classe avverrà in questo modo:

Logger::getInstance()->log("ciao da php5blog.it!");

Oppure cosi:

$logger = Logger::getInstance();
$logger->log("ciao da php5blog.it!");

I due metodi sono perfettamente equivalenti.

Singleton è uno dei pattern più conosciuti ed usati. Per ulteriori informazioni sui Design Patterns, una buona lettura è quella del libro dei “creatori” di questi metodi, la cosiddetta “gang of four”.

Commenti

  • Questo articolo è stato segnalato su ZicZac.it….

  • diggita.it scrive:

    Pattern in PHP: Singleton…

    L’argomento che andremo a trattare oggi è un pattern di programmazione: Singleton. Questo pattern viene utilizzato per fornire un unico punto di accesso ad una classe, ed è utile soprattutto in logger, registri globali, e altri tipi di oggetti dove…

  • Lascia un Commento

    *