Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/02/2015, 13:04
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Objetos anidados PHP

Pues definitivamente te gusta hacer las cosas mal, no tenías la necesidad de rebuscar una solución que además es frágil.

Mira, acabo de corregir tu código usando el mismo concepto que te expliqué anteriormente:
Código PHP:
Ver original
  1. <?php
  2.  
  3.     error_reporting(E_ALL);
  4.     ini_set('display_errors', '1');
  5.  
  6. class Ciudad {
  7.     public $nombre; //Nombre de la ciudad (Madrid, Barcelona, ...)
  8.     public $habitantes=15000; //Codigo postal ciudad
  9.  
  10.     public $edificio1; //Edificio1 de la ciudad
  11.  
  12.  
  13.     public function __construct($nombreCity){
  14.         $this->nombre=$nombreCity; //Guardo nombre ciudad
  15.         $this->edificio1= new Edificio1($this); //Instancio obj hijo Edificio1 pasando nombre obj padre
  16.        // ¿por qué pasar el nombre y no la instancia en su lugar? ¿no te parece absolutamente fuera de sentido?
  17.     }
  18.  
  19.     public function showhabitantes(){
  20.         echo 'Número de habitantes: '.$this->habitantes;
  21.     }
  22. }
  23.  
  24. class Edificio1 {
  25.     public $parent;
  26.  
  27.  
  28.     public function __construct($parent){
  29.         $this->parent=$parent;
  30.     }
  31.  
  32.     public function ciudad(){
  33.         echo 'Pertenezco a la ciudad: '.$this->parent->nombre;
  34.     }
  35.  
  36.     public function cambiarHabitantes($newHabitantes){
  37.         $this->parent->habitantes=$newHabitantes;
  38.     }
  39. }
  40.  
  41.     $ciudad1= new Ciudad('Madrid');
  42.     $ciudad1->edificio1->ciudad();
  43.     echo '</br>';
  44.     $ciudad1->showHabitantes();
  45.     $ciudad1->edificio1->cambiarHabitantes(17000);
  46.     echo '</br>';
  47.     $ciudad1->showHabitantes();
  48.  
  49. ?>

Funciona exactamente igual que lo que hiciste tu pero sin la fragilidad de las variables globales ¿cómo se te ocurrió tan mala solución?

Además incluso ahorré bytes de código, no había razón para usar globales ni nada de estilo, con el sólo paso de referencias era suficiente.

Al final en tu solución terminabas pasando el "nombre de la variable global" con el objetivo de poder acceder a ella posteriormente, dentro de la instancia "edificio1" sin embargo es absolutamente innecesario.

¿Que no es más fácil pasar la referencia del objeto que solo el nombre si al final terminas accediendo a la instancia?

Por favor consulta una referencia de OOP.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.