Originariamente inviato da andreamk
Non proprio.
Una classe singleton e' una classe che ti impedisce in alcun modo di averne due istanze.
La tua classe MySql puo essere istanziata diverse volte con new ; pero utilizando la classe singleton che e' una mezza factory la crei una sola volta.
Qual'è la differenza tra factory e singleton? (ho trovato quel codice sulla pagina che avrebbe dovuto spiegare la singleton )

Per fare una classe singleton per prima cosa devi rendere privato il costruttore della classe stessa.
Se faccio così però la classe 'singleton' non può più instanziare oggetti MySQL.... c'è un modo per rendere il costruttore privato ma lasciarlo disponibile alla classe singleton?
Cosi che se fai new ClasseSingleton lo script ti da errore e poi definire una getIstance all'interno della classe che ti restituisca l'istanza.
Ma devo quindi modificare la classe 'singleton' o la classe 'MySQL'? Non mi è chiaro....
Codice PHP:
class MySql {
var 
$host
var 
$user;
var 
$pass;
var 
$data;
var 
$link;

private static 
istanzaMySql null;


    private function 
__construct() {
    }

public static function 
getInstance() {
 if (
is_null(MySql::$istanzaMySql)) {
    
MySql::$istanzaMySql = new MySql();
}
   return 
MySql::$istanzaMySql;
}
...
.

Cosi facendo l'unico modo per avere un istanza di MySql e' fare MySql::getInstance() e sei sicuro che sia sempre una e una sola istanza in tutto lo script.

Andrea
Ma se invece lo istanzio tramite
Codice PHP:
singleton::getInstance('MySQL'); 
?

Cosa cambia? Perchè l'articolo non sembra fare differenza!