PHP ya hace una copia en escritura donde no crea un nuevo valor hasta que cambie algo, por lo que no se guarda mucha memoria al usar referencias. Si lo hace, incluso puede meterse con algunas cosas que PHP hace internamente para reducir el uso de memoria, lo que empeora las cosas.
Agregue a eso el hecho de que las referencias hacen que las cosas sean demasiado mágicas en general. El valor predeterminado, y por lo tanto lo que la mayoría de la gente espera, es pasar por valor; cuando paso $i
a una función, se complica enormemente tener que preocuparme si esa función cambia misteriosamente $i
a otra completamente diferente y, por lo tanto, hacer copias defensivas por si acaso. (Ya puede modificar $i
si el valor es un objeto, pero en mi opinión no debería).
Básicamente, solo encontraría que el paso por referencia es útil para los parámetros "out", es decir, las variables que espero recuperar de la función en lugar de pasar, a la preg_match
's &$matches
. Incluso para funciones que modifican claramente el objeto que se pasa, como sort
o array_pop
, eso se siente un poco asqueroso ... pero eso es con lo que estamos atrapados.