Questo è quello che cercavo di dire...
Codice PHP:
<?php

class Singleton {
    private static 
$instanceArray = array();

    public function 
__construct() {
        
$className get_class($this);
        if(!isset(
self::$instanceArray[$className]))
            
self::$instanceArray[$className] = &$this;
        else
            throw new 
Exception("{$className} is Singleton");
    }

    public static function 
test() { /* questo metodo è da cancellare */
        
print "<pre>".print_r(self::$instanceArraytrue)."</pre>";
    }
}

class 
extends Singleton {
    public 
$prova;
    public function 
setProva($newValue) {
        
$this->prova $newValue;
    }
}

class 
extends Singleton {

}

$a = new A();
$a->setProva("Stringa da sovrascrivere");

$a2 = new A(); /* Questo produce un errore! */
//$a2->setProva("Stringa sovrascrivente");

$a->test();
//$a2->test();

$b = new B();
$b->test();

?>
mi sarebbe piaciuto che $a2 prendesse l'istanza di $a... ma $this non si può riassegnare (non è vero?)