PHP y las referencias son algo poco intuitivo. Si se usan adecuadamente, las referencias en los lugares correctos pueden proporcionar grandes mejoras de rendimiento o evitar soluciones poco fiables y códigos inusuales.
A continuación se producirá un error:
function f(&$v){$v = true;}
f(&$v);
function f($v){$v = true;}
f(&$v);
Ninguno de ellos tiene que fallar, ya que podrían seguir las reglas de abajo, pero tienen sin duda ha eliminado o desactivado para evitar mucha confusión legado.
Si funcionaron, ambos implican una conversión redundante a referencia y el segundo también implica una conversión redundante a una variable contenida con ámbito.
El segundo solía ser posible permitiendo pasar una referencia al código que no estaba destinado a trabajar con referencias. Esto es extremadamente feo para el mantenimiento.
Esto no hará nada:
function f($v){$v = true;}
$r = &$v;
f($r);
Más específicamente, se convierte la referencia de nuevo en una variable normal ya que no se ha solicitado una referencia.
Esto funcionará:
function f(&$v){$v = true;}
f($v);
Esto da cuenta de que está de paso un no-referencia, pero desea una referencia por lo convierte en una referencia.
Lo que esto significa es que no puede pasar una referencia a una función donde no se solicita explícitamente una de las pocas áreas donde PHP es estricto para pasar tipos o en este caso más de un meta tipo .
Si necesita un comportamiento más dinámico que esto funcionará:
function f(&$v){$v = true;}
$v = array(false,false,false);
$r = &$v[1];
f($r);
Aquí se ve que usted desee una referencia y ya tiene una referencia para lo deja solo. También puede encadenar la referencia, pero lo dudo.
Relacionado: [Advertencia de PHP: el tiempo de pasada de referencia de la llamada ha quedado obsoleto] (http://stackoverflow.com/q/4665782/2157640) – Palec