Vale,he revisado y ampliado el código
Código PHP:
Ver originalclass Medidas{
private $alto;
private $largo;
public function __construct($alto,$largo)
{
$this->alto = $alto;
$this->largo = $largo;
}
public function __set($name, $value)
{
switch($name)
{
case 'Alto':
$this->alto =$value;
break;
case 'Largo':
$this->largo=$value;
break;
}
}
public function __get($name)
{
switch($name)
{
case 'Alto':
return $this->alto;
break;
case 'Largo':
return $this->largo;
}
}
public function __toString()
{
return 'alto='.$this->alto.','.
'largo='.$this->largo.'<br>';
}
}
class Clase1 {
private $propiedad1;
private $Medidas;
public function __construct($propiedad1, Medidas $Medidas)
{
$this->propiedad1=$propiedad1;
$this->Medidas = $Medidas;
}
public function __clone()
{
$this->Medidas = clone $this->Medidas;
}
public function __toString()
{
return 'propiedad1 '.$this->propiedad1.'<br>'.
'medidas='.$this->Medidas;
}
}
class Clase2 extends Clase1{
private $propiedad2;
public function __construct($propiedad1,$Medidas,$propiedad2)
{
parent::__construct($propiedad1,$Medidas);
$this->propiedad2 = $propiedad2;
}
public function __toString()
{
return parent::__toString().
'propiedad2 '.$this->propiedad2.'<br>';
}
}
$prueba=new Clase2('hola',new Medidas(20,30),'adios');
$clonar = clone $prueba;
echo $clonar;
$clonar->Medidas->Alto;
$clonar->Medidas->Largo;
$medidas=new Medidas(50, 50);
echo $medidas;
echo $medidas->Alto;
$medidas->Alto=35;
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