PHP fa già una cosa copy-on-write in cui non crea un nuovo valore finché non si modifica qualcosa, quindi non si risparmia molta memoria usando i riferimenti. In questo modo si può anche fare un pasticcio con alcune cose che PHP fa internamente per ridurre l'utilizzo della memoria, rendendo le cose ancora peggiori.
Aggiungete a ciò il fatto che i riferimenti rendono le cose un po 'troppo magiche in generale. L'impostazione predefinita, e quindi ciò che la maggior parte della gente si aspetta, è il pass-by-value; quando passo $i
a una funzione, complica tremendamente le cose per cui deve preoccuparsi se quella funzione cambia misteriosamente $i
in qualcos'altro interamente, e quindi crea copie difensive per ogni evenienza. (Può già modificare $i
se il valore è un oggetto, ma a mio parere non dovrebbe.)
Fondamentalmente, troverei il pass-by-reference utile per i parametri "out", ovvero le variabili che mi aspetto di tornare dalla funzione piuttosto che passare in, la la preg_match
' s &$matches
. Anche per le funzioni che chiaramente modificano l'oggetto passato, come sort
o array_pop
, che sembra un po 'icky ... ma è quello con cui siamo bloccati.