开发者新闻:克隆函数,处理类的不同方法。
发布者: 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后打印了两个独立对象输入的详细信息,因为它们都引用了不同的对象和内存位置
上面讨论的克隆技术称为浅拷贝。还有其他技术称为深拷贝,其中你创建对象的副本,并引用其他对象等。