PHP fait déjà une chose de copie sur écriture où il ne crée pas de nouvelle valeur jusqu'à ce que vous changiez quelque chose, donc il n'y a pas beaucoup de mémoire économisée en utilisant des références. Cela peut même perturber certaines choses que PHP fait en interne pour réduire l'utilisation de la mémoire, ce qui aggrave encore les choses.
Ajoutez à cela le fait que les références rendent les choses un peu trop magiques en général. La valeur par défaut, et donc ce que la plupart des gens attendent, est la valeur de passage; quand je passe $i
à une fonction, cela complique énormément les choses de devoir se soucier si cette fonction change mystérieusement $i
en quelque chose d'autre, et donc de faire des copies défensives au cas où. (Il peut déjà modifier $i
si la valeur est un objet, mais à mon avis, il ne devrait pas.)
Fondamentalement, je ne trouverais que le passage par référence utile pour les paramètres de "sortie", ce qui signifie que les variables que je m'attends à récupérer de la fonction plutôt que de passer, a la preg_match
's &$matches
. Même pour les fonctions qui modifient clairement l'objet passé, comme sort
ou array_pop
, cela semble un peu capricieux ... mais c'est ce avec quoi nous sommes coincés.
return array($foo, $bar);
etlist($A, $B) = foobar();