programming:php-singlethon-pattern

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
programming:php-singlethon-pattern [2014/05/24 18:56] – creata Giuseppe Di Terlizziprogramming:php-singlethon-pattern [2014/08/21 18:40] (current) Giuseppe Di Terlizzi
Line 1: Line 1:
-====== Singlethon Pattern in PHP ======+====== PHP: Singleton Pattern ======
  
-Con questa guida descriveremo come creare una classe che implementa il pattern //singlethon//.+{{http://php.net/images/php.gif }} Con questa guida descriveremo come creare una classe che implementa il pattern //singleton//.
  
-Come suggerisce il nome il pattern singleton è un particolare pattern che permette ad una classe di essere istanziata "una sola volta". Questa classe può essere d'aiuto durante la progettazione di una applicazione PHP ad esempio per istanziare una sola volta la connessione al DB ed utilizzare questa istanza per recuperare dati nel DB.+Come suggerisce il nomeil pattern singleton è un particolare pattern che permette ad una classe di essere istanziata "una sola volta". Questa classe può venire in aiuto durante la progettazione di una applicazione PHPad esempio per istanziare una sola volta la connessione al DB ed utilizzare questa istanza per recuperare dati nel DB.
  
-Ma adesso vediamo il codice.+Ma adesso vediamo come implementarla.
  
 ===== Codice ===== ===== Codice =====
-<code .php>+ 
 +<file php Singleton.php>
 <?php <?php
-  class Singlethon {+  class Singleton {
  
     private static $instance;     private static $instance;
Line 30: Line 31:
  
   }   }
-</code>+</file> 
 + 
 +Come possiamo vedere il codice contiene poche righe ed è molto intuitivo.
  
-Come possiamo vedere il codice contiene poche righe ed è semplice da utilizzare.+  * Prima di tutto abbiamo reso privato il costruttore in modo che la classe venga istanziata solo attraverso il metodo statico ''Singleton::getInstance()''
 +  * Abbiamo impedito di //clonare// la classe richiamando la funzione ''trigger_error'' in modo da retrituire un errore. 
 +  * Nel codice abbiamo istruito PHP ad instanziare la classe solo quando la proprietà statica ''self::$instance'' non è istanziata con la sua stessa classe (''Singleton''), altrimenti recuperiamo l'istanza creata in precedenza.
  
 Così come abbiamo scritto la classe non permette di fare molto ma //estendendola// permette di fare grandi cose. Così come abbiamo scritto la classe non permette di fare molto ma //estendendola// permette di fare grandi cose.
  
-Comeesempio creiamo una che permette di collezionare valori e di recuperarli in qualsiasi parte del nostro codice.+Come esempio di utilizzo, creiamo una classe che permette di collezionare valori e di recuperarli in qualsiasi parte del nostro codice. Questa verrà chiamata Registry.
  
-<code .php>+<file php Registry.php>
 <?php <?php
-  include Singlethon.php;+  include 'Singleton.php';
      
-  class Registry extends Singlethon {+  class Registry extends Singleton {
  
     private static $registry = array();     private static $registry = array();
Line 67: Line 72:
   }   }
  
-</code>+</file>
  
-Abbiamo esteso la classe //singlethon// e grazie ai metodi "magici" che PHP ci mette a disposizione abbiamo creato una classe che permette di recuperare e salvare dei valori. Vediamola in azione:+Abbiamo esteso la classe ''Singleton'' e grazie ai metodi "magici" che PHP ci mette a disposizione abbiamo creato una classe che permette di recuperare e salvare dei valori. Vediamola in azione:
  
 <code .php> <code .php>
 <?php <?php
  
-include Registry.php;+include 'Registry.php';
  
 $registry = Registry::getInstance(); $registry = Registry::getInstance();
Line 83: Line 88:
 </code> </code>
  
-{{tag>programming php pattern singlethon registry}}+Adesso mettete in moto la vostra immaginazione per utilizzare questo semplice ma utile pattern nel vostro codice. 
 + 
 +Buona programmazione! 
 + 
 +{{tag>programming php pattern singleton registry}}
  • programming/php-singlethon-pattern.txt
  • Last modified: 10 years ago
  • by Giuseppe Di Terlizzi