Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2008, 11:39
leo_25
 
Fecha de Ingreso: agosto-2004
Ubicación: Lima
Mensajes: 109
Antigüedad: 20 años, 7 meses
Puntos: 1
clonar objetos con php5

Hola alguien me da una mano tengo el siguiente código de ejemplo para realizar una clonacion de un objeto:
Código PHP:
<?php
//// clase Vehiculo
class Vehiculo
{
  public 
$peso;
  public 
$potencia;
}

//// clase Rueda
class Rueda
{
  public 
$nombre;
  function 
__construct($nombre)
  {
    
$this->nombre $nombre;
  }
}
//// una Moto es un Vehiculo
//// una Moto tiene Ruedas
class Moto extends Vehiculo
{
  public 
$marca;
  public 
$ruedas = array();
  
//// constructor de copia para Moto
  //// $that referencia al objeto original
  //// $this referencia al objeto clonado
  
function __clone()
  {
    
$this->ruedas['del'] = new Rueda ($that->ruedas['del']->nombre);
    
$this->ruedas['tras'] = new Rueda ($that->ruedas['tras']->nombre);
    
  }
}

//// creamos dos ruedas
$rueda_delantera_mich = new Rueda ('delantera-michelin');
$rueda_trasera_mich = new Rueda ('trasera-michelin');

//// construimos una moto
$yamaha_R1 = new Moto();
$yamaha_R1->marca "Yamaha R1";
$yamaha_R1->ruedas['del'] = $rueda_delantera_mich;
$yamaha_R1->ruedas['tras'] = $rueda_trasera_mich;
//// alehop! -> clonamos la moto
$yamaha_R1_bis $yamaha_R1->__clone();



//// vemos que ruedas tiene cada moto
echo "Yamaha R1:";
echo 
"<br>";
echo 
"Marca: ".$yamaha_R1->marca;
echo 
"<br>";
echo 
"Delantera: ".$yamaha_R1->ruedas['del']->nombre;
echo 
"<br>";
echo 
"Trasera: ".$yamaha_R1->ruedas['tras']->nombre;
echo 
"<br><br>";
//// Yamaha R1:
//// Marca: Yamaha R1
//// Delantera: delantera-michelin
//// Trasera: trasera-michelin

echo "Yamaha R1 (bis):";
echo 
"<br>";
echo 
"Marca: ".$yamaha_R1->marca;
echo 
"<br>";
echo 
"Delantera: ".$yamaha_R1_bis->ruedas['del']->nombre;
echo 
"<br>";
echo 
"Trasera: ".$yamaha_R1_bis->ruedas['tras']->nombre;
echo 
"<br>segun ele ejmplo deberia imprimir<br>";
//// Yamaha R1 (bis):
//// Marca: Yamaha R1
//// Delantera: delantera-michelin
//// Trasera: trasera-michelin


?>

pero me aparece el siguiente error

Fatal error: Cannot call __clone() method on objects - use 'clone $obj' instead in C:\xampp\htdocs\proyecto\php_oo5\utiles_php\class1 5.php on line 45


line 45:
Código PHP:
$yamaha_R1_bis $yamaha_R1->__clone(); 
si rEemplazo esa linea por:
Código PHP:
$yamaha_R1_bis =clone $yamaha_R1
desaparece el error pero solo imprime:

Marca: Yamaha R1
Delantera: delantera-michelin
Trasera: trasera-michelin

Yamaha R1 (bis):
Marca: Yamaha R1
Delantera:
Trasera:


alguien me puede dar una ayuda muchas gracias