2010-11-26 6 views

Respuesta

40

Es un pase por referencia. La variable dentro de la función "apunta" a los mismos datos que la variable del contexto de llamada.

function foo(&$bar) 
{ 
    $bar = 1; 
} 

$x = 0; 
foo($x); 
echo $x; // 1 
+1

Tengo que empezar a usar '' foo' y bar' sean en mis ejemplos .. – cambraca

+2

por lo que se comporta de manera similar a cuando se utiliza '$ var' mundial – Alex

+4

@Alex, tipo de verdad, pero hay dos grandes diferencias: 1) funciona para ámbitos no globales (funciones que llaman a otras funciones) y 2) no depende de la función interna sabiendo el nombre de la variable. Las referencias como argumentos de funciones son más fáciles de depurar y menos propensas a errores que las variables globales, aunque todavía se aplican algunas de las mismas preocupaciones (por ejemplo, cambios inesperados en una variable). – Matthew

5

Acepta una referencia a una variable como parámetro.

Esto significa que cualquier cambio que la función realice en el parámetro (p. Ej., $var = "Hi!") afectará a la variable pasada por la función de llamada.

15

Básicamente si cambia $var dentro de la función, se cambia al exterior. Por ejemplo:

$var = 2; 

function f1(&$param) { 
    $param = 5; 
} 

echo $var; //outputs 2 
f1($var); 
echo $var; //outputs 5 
+0

Gracias, muy claramente escrito. –

2

El signo (&) antes de una variable (& $ foo) anula paso por valor para especificar que desea pasar la variable por referencia en su lugar.

Por ejemplo, si usted tiene esto:

function doStuff($variable) { 
    $variable++; 
} 

$foo = 1; 

doStuff($foo); 
echo $foo; 
// output is '1' because you passed the value, but it doesn't alter the original variable 

doStuff(&$foo); // this is deprecated and will throw notices in PHP 5.3+ 
echo $foo; 
// output is '2' because you passed the reference and php will alter the original variable. 

funciona en ambos sentidos.

function doStuff(&$variable) { 
    $variable++; 
} 

$foo = 1; 

doStuff($foo); 
echo $foo; 
// output is '2' because the declaration of the function requires a reference. 
+5

Su segundo ejemplo, que usa referencia de paso de llamada 'doStuff (& $ foo)', está en desuso y no debe utilizarse. – Matthew

+0

Es bueno saberlo. ¡Gracias! –

+2

Mi comentario podría ser engañoso ahora con el código adicional. Entonces, para que quede claro: 'function doStuff (& $ variable) {}' está bien, pero 'doStuff (& $ variable);' en el momento de la llamada no lo es. – Matthew

2

Es pass by reference.

Si está familiarizado con los punteros C, es como pasar un puntero a la variable.

Excepto que no hay necesidad de desreferenciarlo (como C).

+0

+1. Me preguntaba al leer lo anterior si esto era lo que los punteros significaban en C; con su confirmación, ahora tiene mucho sentido. – Kaji

2

estás pasando a $ var como referencia, es decir, el valor real de $ var se actualiza cuando se modifica el interior de la función Boo

ejemplo:

function boo(&$var) { 
    $var = 10; 
} 

$var = 20; 
echo $var; //gets 20 
boo($var); 
echo $var //gets 10 
-1

Si alguna función comienza con signo (&) , Significa su llamada por la función de referencia. Devolverá una referencia a una variable en lugar del valor.

function reference_function(&$total){ 
    $extra = $total + 10; 
} 

$total = 200; 
reference_function($total) ; 
echo $total; //OutPut 210 
+0

Por favor, explique qué agrega esto, cuando parece ser una copia más o menos directa de la respuesta aceptada (con un error ortográfico en la penúltima línea). – DaveP

+0

He mejorado mi respuesta. Estoy tratando de explicar si necesitas modificar la variable directa, entonces puedes llamar como se indica arriba. Gracias – Anujayweb

Cuestiones relacionadas