Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   clonar objetos con php5 (http://www.forosdelweb.com/f68/clonar-objetos-con-php5-573829/)

leo_25 08/04/2008 11:39

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

GatorV 08/04/2008 11:52

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.


La zona horaria es GMT -6. Ahora son las 20:23.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.