php. clone一个对象,php面向对象克隆对象clone()

本文介绍了PHP中如何通过`clone`关键字来创建对象的副本,以实现对象间的独立操作。在PHP中,对象是通过引用调用的,使用`clone`可以创建一个与原对象独立的新对象。通过示例展示了如何使用`__clone()`魔术方法在克隆过程中为新对象重新初始化属性值,确保副本与原对象的差异性。
摘要由CSDN通过智能技术生成

PHP中的对象模型是通过引用来调用对象的,但有时需要建立一个对象的副本,改变原来的对象时不希望影响到副本。如果使用“new”关键字重新创建对象,再为属性赋值,这样做会比较烦琐而且容易出错。在PHP中可以根据现有的对象克隆出一个完全一样的对象,克隆以后,原本和副本两个对象完全独立,互不干扰。在PHP在使用“clone”关键字克隆对象。

实例一如下:class Person { //声明类Person,并在其中声明了三个成员属性,一个构造方法以及一个成员方法

private $name; //第一个私有成员属性$name用于存储人的名子

private $sex; //第二个私有成员属性$sex用于存储人的性别

private $age; //第三个私有成员属性$age用于存储人的age

function __construct($name="", $sex="", $age=1) { //构造方法在对象诞生时为成员属性赋初值

$this->name=$name;

$this->sex=$sex;

$this->age=$age;

}

function say() { //一个成员方法用于打印出自己对象中全部的成员属性值

echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."
";

}

}

$p1=new Person("张三", "男", 20); //创建一个对象并通过构造方法为对象中所有成员属性赋初值

$p2=clone $p1; //使用clone关键字克隆(复制)对象,创建一个对象的副本

// $p3=$p1 //这不是复制对象,而是为对象多复制出一个访问该对象的引用

$p1->say(); //调用原对象中的说话方法,打印原对象中的全部属性值

$p2->say(); //调用副本对象中的说话方法,打印出克隆对象的全部属性值

如果需要对克隆后的副本对象在克隆时重新为成员属性赋值,则可以在类中声明一个魔术方法“__clone()”.该方法是在对象克隆时自动调用的,所以就可以通过此方法对克隆后的副本重新初始化。__clone()方法不需要任何参数,该方法中自动包含$this对象的引用,$this是副本对象的引用。

实例二如下:class Person { //声明类Person,并在其中声明了三个成员属性,一个构造方法以及一个成员方法

private $name; //第一个私有成员属性$name用于存储人的名子

private $sex; //第二个私有成员属性$sex用于存储人的性别

private $age; //第三个私有成员属性$age用于存储人的age

function __construct($name="", $sex="", $age=1) { //构造方法在对象诞生时为成员属性赋初值

$this->name=$name;

$this->sex=$sex;

$this->age=$age;

}

function __clone() { //声明此方法则在对象克隆时自动调用,用来为新对象重新赋值

$this->name="我是".$that->name."的副本"; //为副本对象中的name属性重新赋值

$this->age=10; //为副本对象中的age属性重新赋值

}

function say() { //一个成员方法用于打印出自己对象中全部的成员属性值

echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."
";

}

}

$p1=new Person("张三", "男", 20); //创建一个对象并通过构造方法为对象中所有成员属性赋初值

$p2=clone $p1; //使用clone克隆(复制)对象,并自动调用类中的__clone()方法

$p1->say(); //调用原对象中的说话方法,打印原对象中的全部属性值

$p2->say(); //调用副本对象中的说话方法,打印出克隆对象的全部属性值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值