Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 08-abr-2008, 11:39   #1 (permalink)
leo_25 ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2004
Mensajes: 59
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
leo_25 está desconectado   Responder Citando
Antiguo 08-abr-2008, 11:52   #2 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.616
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.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 03:42.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93