Ver Mensaje Individual
  #10 (permalink)  
Antiguo 19/08/2005, 21:10
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Hola:
La utilidad del retorno por referencia es más clara cuando se manejan objetos y no variables simples.

Te pongo un ejemplo:
Código PHP:
<?php
class A{
    var 
$nombre "porDefecto";
}

class 
B{
    var 
$componenteDeB;
    
    function 
B(&$comp){//constructor
        
$this->componenteDeB = &$comp;
    }

    function 
cambiarNombreDeComponenteDeB($nuevoNombre){
        
$componente = &$this->componenteDeB;
        
$componente->nombre $nuevoNombre;
    }

    function & 
obtenerComponenteDeB(){
        return 
$this->componenteDeB;
    }

    function 
obtenerNombreDeComponenteDeB(){
        
$componente $this->componenteDeB;
        return 
$componente->nombre
    }
}

class 
C{
    var 
$componenteDeC;
    
    function 
C(&$comp){//constructor
        
$this->componenteDeC = &$comp;
    }

    function 
cambiarNombreDeComponenteDeC($nuevoNombre){
        
$componente = &$this->componenteDeC;
        
$componente->nombre $nuevoNombre;
    }
}


// Creamos un objeto B, pasando como parámetro un nuevo objeto A como componente:
$objetoB = new B(new A);
// Cambiamos el nombre de su componente:
$objetoB->cambiarNombreDeComponenteDeB('nombre1');

// Ahora creamos un objeto C pero queremos que comparta la componente con B:
// O sea, le pasamos como parámetro la componente de B, pero será una referencia, ya que ese método obtenerComponenteDeB() está declarado para que devuelva una referencia.
$objetoC = new C($objetoB->obtenerComponenteDeB());
// Cambiamos el nombre de su componente:
$objetoC->cambiarNombreDeComponenteDeC('nombre2');

// Vemos cuál es el valor del nombre en la componente de B
echo $objetoB->obtenerNombreDeComponenteDeB();// esto imprime 'nombre2'
?>
Mira todo el manejo de referencias y espero que tengas muchas preguntas.

Lo que no se debe hacer es:
- Si queremos que "unaFuncion()" maneje una referencia de $variable como parámetro:
Código PHP:
// INCORRECTO
function unaFuncion($unParametro){
   
// acciones
}

unaFuncion(&$variable); 
Código PHP:
// CORRECTO
function unaFuncion(&$unParametro){
   
// acciones
}

unaFuncion($variable); 
Saludos