Looking for php Keywords? Try Ask4Keywords

PHP Pasar por referencia


Ejemplo

Esto le permite pasar una variable por referencia a una función o elemento que le permite modificar la variable original.

El paso por referencia no se limita solo a las variables, lo siguiente también se puede pasar por referencia:

  • Nuevas declaraciones, por ejemplo, foo(new SomeClass)
  • Referencias devueltas desde funciones

Arrays

Un uso común de "pasar por referencia" es modificar los valores iniciales dentro de una matriz sin llegar al extremo de crear nuevas matrices o ensuciar su espacio de nombres. El paso por referencia es tan simple como precediendo / prefijando la variable con un & => &$myElement .

A continuación se muestra un ejemplo de cómo aprovechar un elemento de una matriz y simplemente agregar 1 a su valor inicial.

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

Ahora, cuando aproveche cualquier elemento dentro de $arr , el elemento original se actualizará a medida que se incrementa la referencia. Puedes verificar esto por:

print_r($arr);

Nota

Debe tomar nota al utilizar el pase por referencia dentro de los bucles. Al final del bucle anterior, $num todavía contiene una referencia al último elemento de la matriz. ¡Asignarlo a un bucle posterior terminará manipulando el último elemento de la matriz! Puede asegurarse de que esto no suceda unset() después del bucle:

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

Lo anterior asegurará que no se encuentre con ningún problema. Un ejemplo de los problemas que podrían relacionarse con esto está presente en esta pregunta en StackOverflow .


Funciones

Otro uso común para pasar por referencia es dentro de las funciones. Modificar la variable original es tan simple como:

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

Lo cual se puede verificar haciendo echo de la variable original.

echo $var;

Existen varias restricciones en cuanto a las funciones, como se indica a continuación en la documentación de PHP:

Nota: No hay ningún signo de referencia en una llamada de función, solo en las definiciones de función. Las definiciones de funciones solas son suficientes para pasar correctamente el argumento por referencia. A partir de PHP 5.3.0, recibirá una advertencia que dice que el "paso por referencia en tiempo de llamada" está en desuso cuando usa & in foo (& $ a) ;. Y a partir de PHP 5.4.0, se eliminó el paso por referencia del tiempo de llamada, por lo que su uso generará un error fatal.