2010-03-19 15 views
8

considerar:¿Qué significa esta firma (&) en PHP?

public function & get($name, $default = null) 

Por qué &?

+0

posible duplicado de [Referencia - ¿Qué significa este símbolo en PHP] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean -en-php) – Gordon

Respuesta

10

En la sintaxis de PHP, esto significa que la función devuelve una referencia en lugar de un valor. Por ejemplo:

<?php 
    $foo = 'foo'; 

    function & get_foo_ref() 
    { 
     global $foo; 
     return $foo; 
    } 

    // Get the reference to variable $foo stored into $bar 
    $bar = & get_foo_ref(); 
    $bar = 'bar'; 

    echo $foo; // Outputs 'bar', since $bar references to $foo. 
?> 

En el ejemplo anterior, la eliminación de la & de la declaración de la función haría que la variable $foo todavía contienen 'foo', ya que sólo el valor, no se devolvió la referencia de la función.

Esto se usó más a menudo en PHP4, porque no pasaba objetos por su referencia y los clonaba en su lugar. Debido a esto, las variables de objeto tuvieron que pasarse por referencia para evitar la clonación no deseada. Este ya no es el caso en PHP5 y las referencias no deben usarse para este propósito.

Sin embargo, las funciones que devuelven referencias no son completamente inútiles tampoco (o una mala práctica, cuando no se utilizan para reemplazar referencias a objetos).

Por ejemplo, personalmente los he usado al crear un script que pasa una "ruta" a una función, que devuelve referencia a la variable en esa ruta, lo que me permite establecer un valor y leer el valor. Debido a la naturaleza recursiva de la función, se necesitaba devolver la referencia.

Por rithiur

+0

+1 para una explicación detallada y pragmática que también funciona como evidencia de que el sistema de repuestos de SO no es tan justo –

+1

'$ bar = & get_foo_ref(); ', aquí y no es necesario – user198729

+0

@Manos Dilaverakis: Creo que compartir cosas buenas nunca sería una falla. – Young

11

Significa que devuelve una referencia al resultado en lugar de una copia del mismo.

Returning References in PHP

+0

+1 Gástame por 40 segundos. –

+0

Solo una nota al margen, esto casi nunca es beneficioso. Los objetos son pasados ​​por referencia. Lo único que esto PODRÍA ayudar es con las matrices (para que no se copien), pero el beneficio es mínimo, si es que existe. – ryeguy