Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/07/2007, 12:23
Avatar de tunait
tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 6 meses
Puntos: 381
Mi objeto no guarda un valor cambiado.

Buenas; por esta parte de los foros estrenándome.

Que me atasco ya en lo más básico y no sé por qué no me chuta el asunto, así que si me puede alguien explicar la razón de que un objeto no guarde un valor que le cambio después de creado le quedaré bien agradecida.

Es con PHP4.

Tengo una clase Uno y una clase Dos que extiende a la primera.

Desde la primera (Uno) creo uno o más objetos de la clase Dos y los guardo en un array dentro de Uno.

En Uno tengo también una función para cambiar un determinado valor .

finalmente en Uno hay una función para escribir los valores de los objetos guardados en el array.

Código PHP:
class Uno{
    var 
$elementos;
    function 
uno(){
        
$this -> elementos = array();
    }
    function 
cambiaAtributo(){
        
$this -> valor 'maria castaña';
    }
    function 
agregaDos($nombre 'campo[]'$valor 'valor'){
        
$this -> elementos[] = new Dos($nombre$valor);
    }
    
    function 
escribe(){
        foreach(
$this -> elementos as $v){
            echo 
$v -> valor '<br />********<br />';
        }
    }

Aluego tengo una clase Dos que crea un objeto con un atributo nombre y otro atributo valor.

Código PHP:
class Dos extends Uno{
    var 
$nombre;
    var 
$valor;
    function 
dos($nombre 'campo[]'$valor 'valor'){
        
$this -> nombre $nombre;
        
$this -> valor $valor;
    }

Bueno, si ahora creo el objeto y le agrego el otro objeto y le pido que me muestre el valor me imprime lo que ha de imprimir

Código PHP:
$pepe = new Uno();
$pepe -> agregaDos('nombre''perico');
foreach(
$pepe -> elementos as $v){
    echo 
$v -> valor '<br />********<br />';

Si después uso el método cambiaAtributo() y le pido que me lo imprima también lo hace bien.

Código PHP:
foreach($pepe -> elementos as $v){
    
$v -> cambiaAtributo();
    echo 
$v -> valor '<br />********<br />';

Pero si le vuelvo a pedir que me imprima el valor al mismo objeto me escribe el valor que le dí cuando lo creé en vez del que cambié.

Código PHP:
foreach($pepe -> elementos as $v){
    echo 
$v -> valor '<br />********<br />';

Osea, me devuelve
Cita:
perico
********
maria castaña
********
perico
********
¿Por qué? ¿Qué error de concepto tengo? (o cual de todos mis errores de conceptos es exactamente en este caso)

Si me leíste hasta aquí, gracias verimach.

Saludos