El siguiente patrón solía ser posible en PHP:arrays PHP y pasar por referencia
function foo($arr)
{
// modify $arr in some way
return $arr;
}
Esto entonces se podría llamar usando el paso por valor:
$arr = array(1, 2, 3);
$newarr = foo($arr);
o de Transmisión por referencia:
$arr = array(1, 2, 3);
foo(&$arr);
pero "el tiempo de referencia de la llamada por referencia ha quedado en desuso". La modificación de la firma de la función:
function foo(&$arr)
manejará el caso pase por referencia, pero se romperá la naturaleza de doble propósito de la función original, ya que el paso por el valor ya no es posible.
¿Hay alguna forma de evitar esto?
Activa E_DEPRECATED, que es solo un * nivel de error *. Pero la función en sí misma no se ve afectada. No es "ya no es posible". (Y aún no va a ser eliminado en los próximos años PHP 5.4 ..) – mario
Quise decir que pasar por valor cuando se llama a una función que está declarada como tomar su argumento por referencia no es posible. Como usted señala, todavía es * posible * pasar por referencia, incluso si la función no declara su argumento de esa manera, pero siempre me gusta pensar que las cosas obsoletas deben evitarse si es posible. –
Sí, eso es exactamente por lo que * declaró * obsoleto. Comúnmente se mal uso sin pensarlo mucho. Y este mensaje de error está destinado a asustar a la gente de esa sintaxis. Ahora que ya pensaste en tu código actual, ya no se aplica a ti. (Evitaría las soluciones falsas sobre la sintaxis soportada no-any-soon-to-be-removed.) – mario