Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

clonar objetos con php5

Estas en el tema de clonar objetos con php5 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 08/04/2008, 11:39
 
Fecha de Ingreso: agosto-2004
Ubicación: Lima
Mensajes: 109
Antigüedad: 19 años, 9 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
  #2 (permalink)  
Antiguo 08/04/2008, 11:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: clonar objetos con php5

Hola leo_25,

No se de que parte intuiste que $that se refería al objeto de donde estas clonando, si ves el manual, tu explicitamente debes de hacer el código de conversión al clonar un objeto, en tu caso, no deberías de re-definir __clone, ya que tu buscas que se copie tal cual el objeto así que mejor quita el método __clone.

Saludos.

Tema trasladado a PHP Orientado a Objetos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:12.