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