Blog de Gonzalo

CLONAR OBJETOS

En php cuando copio una variable $a a una variable $b y cambio el contenido de la variable $a el contenido de la variable $b seguirá siendo el mismo que en un principio. Algo que todos los programadores de php y que es de perogullo y que para que ocurra el caso que al cambiar el contenido de la variable $a cambie el contenido de la variale $b tendríamos que haber copiado la variable $a por referencia:
Veamos unos ejemplos


andlt?php

$a = 'hola';
$b = $a;
$a = 'adiós';
echo $a.' '.$b;
//se mostrará adiós hola
$a = 'hola';
$b = and$a;
$a = 'adiós';
echo $a.' '.$b;
//se mostrará adiós adiós
?andgt;


EL ejemplo que hemos visto es un ejemplo claro y básico que todos ya sabemos. Pero con el tema de objetos es diferente. Para clonar un objeto hay que usar la función clone de php, ya que si lo hacemos como en el caso anterior de las variables. Nos ocurrirá que cuando hagamos alguna operación en el objeto original repercutirá en el objeto copia.
Con el siguiente ejemplo queda más claro:

andlt?php
class prueba{
var $a ='';
public function setA($valor)
{
$this->a = $valor;
}
public function getA()
{
echo 'a '.$this->a;
}
}
//Fin clase
$ob1 = new prueba();
$ob2 = $ob1;
$ob3 = clone $ob1;
$ob1->setA(2);
$ob1->getA();
$ob2->getA();
$ob3->getA();
//Cuando se llama al método getA() en los tres objetos se muestra 2,2 y nada...ya que el setA del objeto 1 afecta al objeto 1 y al objeto 2 pero no le afecta al objeto 3 que es el objeto clonado con la función clone. Cuando se haga alguna operación con $ob1 también repercutirá en $ob2, pero no en $ob3.
?andgt;



Este artículo es bastante sencillo en explicación ya que no es un tema demasiado complicado pero si que es cierto que con el tema de copiar objetos en php hay que tener cuidado, ya que se pueden obtener resultados no deseados.

Compartir en twitter