vi algunas declaraciones de función como esta:¿Cuál es el propósito de usar & antes del argumento de una función?
function boo(&$var){
...
}
¿Qué hace el personaje &
?
vi algunas declaraciones de función como esta:¿Cuál es el propósito de usar & antes del argumento de una función?
function boo(&$var){
...
}
¿Qué hace el personaje &
?
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
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.
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
Gracias, muy claramente escrito. –
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.
Su segundo ejemplo, que usa referencia de paso de llamada 'doStuff (& $ foo)', está en desuso y no debe utilizarse. – Matthew
Es bueno saberlo. ¡Gracias! –
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
Si está familiarizado con los punteros C, es como pasar un puntero a la variable.
Excepto que no hay necesidad de desreferenciarlo (como C).
+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
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
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
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
He mejorado mi respuesta. Estoy tratando de explicar si necesitas modificar la variable directa, entonces puedes llamar como se indica arriba. Gracias – Anujayweb
Tengo que empezar a usar '' foo' y bar' sean en mis ejemplos .. – cambraca
por lo que se comporta de manera similar a cuando se utiliza '$ var' mundial – Alex
@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