usa pure il mio codice
riguardo il resto, se il costruttore è privato, non potrai mai fare new A
mentre l'assegnazione esplicita per riferimento sarà sempre possibile poichè avrai 2 nomi che puntano alla stessa istanza di oggetto
per risolvere il primo problema, devi cambiare runtime il costruttore della classe, ma ti serve la runkit extension, che è ancora giovane.
Una volta integrata in PHP, potrai fare quello che ti pare ...
codice:
class A {
function __construct(){
// codice che modifica il costruttore, al primo new A, non sarà possibile riusare new A
}
}
In JS la cosa è fattibile ..
codice:
function A(){
if(this instanceof A)
A = undefined;
};
var a = new A;
new A(); // error
solo per darti un'idea del concetto, che oltretutto, come approccio, mi sembra molto interessante