开发者新闻:克隆函数,处理类的不同方法。

发布者: kaotikOn 2009/9/15 10:00:00 8890 阅读量
了解如何在类内克隆您的函数。这是一种传递和检索数据的好方法。



此教程和其它教程也可以在我的网站上找到: http://www.kaotik.biz

这篇教程最初由 Hitesh Agrawal 编写。由于它已经不再在线上可用且是一个非常棒的教程,所以我将其复制到我的网站上。

克隆函数,处理类的不同方法。

在 PHP 5 中,当你将一个对象赋给另一个对象时,它创建了一个引用副本而不是创建一个副本。这将导致大混乱,因为所有的对象都将共享为对象定义的同一内存。为了解决这个问题,PHP 5 引入了克隆方法,该方法创建对象的一个副本。当你在 PHP 5 中调用克隆方法时,会自动调用 __clone 魔法方法。

示例 - 无对象克隆

class Animal
{
   public 
$name;
   public 
$legs;
 
   function 
setName($name)
   {
    
$this->name $name;
   }
 
   function 
setLegs($legs)
   {
    
$this->legs $legs;
   }
}
 
$tiger = new Animal();
$tiger->name "Tiger";
$tiger->legs 4;
 
$kangaroo $tiger;
$kangaroo->name "Kangaroo";
$kangaroo->legs 2;
 
echo 
$tiger->name."---".$tiger->legs;
echo 
"
"
.$kangaroo->name."---".$kangaroo->legs;
?>


输出
袋鼠—2
袋鼠—2

解释

在这里,我创建了一个Animal类的$tiger对象

创建了另一个变量$kangaroo并将$tiger赋给了$kangaroo

echo 执行时打印最后输入的详细信息,因为这两个变量都指向相同的内存位置


示例 – 使用clone函数的上述示例
class Animal
{
   public 
$name    ;
   public 
$legs;
 
   function 
setName($name)
   {
    
$this->name $name;
   }
 
   function 
setLegs($legs)
   {
    
$this->legs $legs;
   }
 
   function 
__clone()
   {
    echo 
"正在执行对象克隆";
   }
}
 
$tiger = new Animal();
$tiger->name "Tiger";
$tiger->legs 4;
 
$kangaroo = clone $tiger;
$kangaroo->name "Kangaroo";
$kangaroo->legs 2;
 
echo " ".$tiger->name."---".$tiger->legs;
echo " ".$kangaroo->name."---".$kangaroo->legs;
?>

输出
正在执行对象克隆
Tiger—4
袋鼠—2

解释

创建了一个$tiger对象的Animal类

接下来创建了一个变量$kangaroo,该变量是$tiger的克隆。这调用了__clone魔法方法

执行echo后打印了两个独立对象输入的详细信息,因为它们都引用了不同的对象和内存位置

上面讨论的克隆技术称为浅拷贝。还有其他技术称为深拷贝,其中你创建对象的副本,并引用其他对象等。