Parece que no puedo obtener ninguna información coherente sobre esto. Diferentes fuentes parecen decir cosas diferentes y el venerable php.net en sí (aparece) no lo dice explícitamente, aunque debo admitir que solo lo miré rápidamente.¿Se pasan objetos PHP5 por referencia?
En los casos en los que estoy pasando alrededor de los objetos 'pesados', tengo que pasar por referencia, pero no quiero seguir escribiendo:
function foo(TypeName& $obj)
si puedo continuar con sólo
function foo(TypeName $obj)
¿Qué dice la norma?
¿Puede pasar una referencia de un identificador de objeto? –
Cuando pasa un objeto, todavía está pasando "por valor". Sin embargo, el "valor" NO es el objeto en sí mismo. El valor es el identificador de objeto, que los descriptores de acceso (->) usan para encontrar el objeto. Por lo tanto, cada vez que pasa un objeto o asigna un objeto a otra cosa, "siente" que pasa por referencia. Se "siente" como un alias cuando se usa ->. Pero técnicamente no es un alias, sino una copia de un valor donde el valor es un identificador de objeto. Si fuera un alias, reasignar a un valor completamente diferente cambiaría todos los alias a ese nuevo valor, pero verá que no los convierte en alias. – OCDev
@OCDev así que cada vez que ese objeto se clona? Un poco de desperdicio de recursos. –