Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/02/2015, 11:43
Avatar de Macf
Macf
 
Fecha de Ingreso: agosto-2007
Mensajes: 29
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Objetos anidados PHP

Lamentablemente no puedo hacerlo con tu método porque si tengo muchos edificios, y muchas ciudades, tendría que duplicar decenas de veces el mismo objeto, y aun así no podría cambiar ninguna propiedad del objeto padre desde alguna función de los objetos hijos. No obstante leyendo tu solución se me ocurrió una que si que he conseguido que funcione, quizás no sea demasiado bonita y un pelín enrevesada, pero consigo todo lo que necesito hacer.

Le paso el nombre del objeto padre al objeto hijo cuando lo creo, y después si dentro del objeto hijo declaro la variable del objeto padre como global puedo acceder a ella desde "fuera" pero desde el objeto hijo, es decir, puedo acceder a las propiedades y métodos públicos del padre desde dentro del hijo.

Aquí está el código nuevo funcionando, como se puede ver soy capaz de acceder a las propiedades del objeto ciudad1 (nombre y habitantes) desde el objeto hijo edificio1, y cambiarlas (cambio el número de habitantes de la ciudad1 con $ciudad1->edificio1->cambiarHabitantes(17000) )
Código PHP:
<?php

    error_reporting
(E_ALL);
    
ini_set('display_errors''1');
    
class 
Ciudad {
    public 
$nombre//Nombre de la ciudad (Madrid, Barcelona, ...)
    
public $habitantes=15000//Codigo postal ciudad
    
    
public $edificio1//Edificio1 de la ciudad
    
    
    
public function __construct($nombreCity,$nombreVar){
        
$this->nombre=$nombreCity//Guardo nombre ciudad
        
$this->edificio1= new Edificio1($nombreVar); //Instancio obj hijo Edificio1 pasando nombre obj padre
    
}
    
    public function 
showhabitantes(){
        echo 
'Número de habitantes: '.$this->habitantes;
    }
}

class 
Edificio1 {
    public 
$parent;
    
    
    public function 
__construct($parent){
        
$this->parent=$parent;
    }
    
    public function 
ciudad(){
        global ${
$this->parent};
        echo 
'Pertenezco a la ciudad: '.${$this->parent}->nombre;
    }
    
    public function 
cambiarHabitantes($newHabitantes){
        global ${
$this->parent};
        ${
$this->parent}->habitantes=$newHabitantes;
    }
}

    
$ciudad1= new Ciudad('Madrid','ciudad1');
    
$ciudad1->edificio1->ciudad();
    echo 
'</br>';
    
$ciudad1->showHabitantes();
    
$ciudad1->edificio1->cambiarHabitantes(17000);
    echo 
'</br>';
    
$ciudad1->showHabitantes();
    
?>
Muchisimas gracias por tu ayuda, sin ti no habria dado con la solución.