Ver Mensaje Individual
  #6 (permalink)  
Antiguo 27/12/2012, 05:12
ivan_esp
 
Fecha de Ingreso: diciembre-2012
Mensajes: 26
Antigüedad: 12 años
Puntos: 0
Respuesta: Duda agregacion,metodos magicos,etc

Vale,he revisado y ampliado el código

Código PHP:
Ver original
  1. class Medidas{
  2.         private $alto;
  3.         private $largo;
  4.         public function __construct($alto,$largo)
  5.         {
  6.             $this->alto = $alto;
  7.             $this->largo = $largo;
  8.         }
  9.         public function __set($name, $value)
  10.         {
  11.             switch($name)
  12.             {
  13.                 case 'Alto':
  14.                     $this->alto =$value;
  15.                     break;
  16.                 case 'Largo':
  17.                     $this->largo=$value;
  18.                     break;
  19.             }
  20.         }
  21.        
  22.         public function __get($name)
  23.         {
  24.             switch($name)
  25.             {
  26.                 case 'Alto':
  27.                     return $this->alto;
  28.                     break;
  29.                 case 'Largo':
  30.                     return $this->largo;
  31.             }
  32.         }
  33.        
  34.         public function __toString()
  35.         {
  36.             return 'alto='.$this->alto.','.
  37.                     'largo='.$this->largo.'<br>';
  38.         }
  39.     }
  40.      
  41.     class Clase1 {
  42.         private $propiedad1;
  43.         private $Medidas;
  44.      
  45.         public function __construct($propiedad1, Medidas $Medidas)
  46.         {
  47.             $this->propiedad1=$propiedad1;
  48.             $this->Medidas = $Medidas;
  49.         }
  50.      
  51.         public function __clone()
  52.         {
  53.             $this->Medidas = clone $this->Medidas;
  54.         }
  55.         public function __toString()
  56.         {
  57.             return 'propiedad1 '.$this->propiedad1.'<br>'.
  58.                     'medidas='.$this->Medidas;
  59.         }
  60.     }
  61.      
  62.     class Clase2 extends Clase1{
  63.         private $propiedad2;
  64.      
  65.         public function __construct($propiedad1,$Medidas,$propiedad2)
  66.         {
  67.             parent::__construct($propiedad1,$Medidas);
  68.             $this->propiedad2 = $propiedad2;
  69.         }
  70.        
  71.         public function __toString()
  72.         {
  73.             return parent::__toString().
  74.                     'propiedad2 '.$this->propiedad2.'<br>';
  75.         }
  76.     }
  77.      
  78.     $prueba=new Clase2('hola',new Medidas(20,30),'adios');
  79.    
  80.     $clonar = clone $prueba;
  81.      echo $clonar;
  82.     $clonar->Medidas->Alto;
  83.     $clonar->Medidas->Largo;
  84.    
  85.     $medidas=new Medidas(50, 50);
  86.     echo $medidas;
  87.    echo $medidas->Alto;
  88.    $medidas->Alto=35;
  89.    echo $medidas;

He estado haciendo pruebas con un objeto de la clase medidas para ver si funcionaba el __set y el __get y funciona correctamente(85-89) ,pero "$clonar->Medidas->Alto" no funciona ni obteniendo valor ni poniendo.

No se si es problema mio o si a vosotros os funciona...

Y bueno lo que indica David , a ver ,yo entiendo que se debe acceder al objeto Medidas que ha sido heredado de la clase1 para acceder a sus funciones publicas __get y __set ¿no es asi?,ademas me piden que sea privado Medidas.

Gracias y Saludos