
在我们之前的学习中,有很多的关键字,比如$this、$new之类的,今天我们继续来看一下在PHP中也算比较常用到的关键字clone克隆关键字。在学习克隆关键字之前,我们需要知道PHP中的对象模型是通过引用来调用对象的,但是又是偶需要建议一个对象的副本,目的就是想再原有对象改变的时候能够不影响到对象副本。
这时候如果使用new关键字是可以重新创建对象,然后再给属性赋上相同的值,也是可以起到新建副本的作用,但是这种方法不仅麻烦而且容易出错,这时候就希望PHP能有一个完全一样的对象,而且这两个还不是互相干扰的,也就是我们想的克隆。那应该怎样去实现呢?不慌,接着看。
clone关键字
我们希望有一个能够和原本对象互不干扰的副本,在PHP中通过clone关键字就可以实现克隆对象了。
clone关键字的语法格式如下:
克隆对象名称 = clone 原对象名称;
你可以把克隆这个动作理解为,把对象的内存区域进行复制,赋值后的对象与原对象之间是相互独立的。并且他们之间的成员方法、属性和值都是完全相同的。
接下来我们通过一个简单的实例来看一下clone的能力吧,示例如下:
<?php
class father{
public $study1, $study2;
public function __construct($study1, $study2){
$this -> study1 = $study1;
$this -> study2 = $study2;
}
public function output(){
echo $this -> study1.','. $this -> study2.'<br>';
}
}
$obj = new father('好好学习', '天天向上');
$obj2 = clone $obj;//克隆$obj
$obj -> output();
$obj2 -> output();
echo '<pre>';
var_dump($obj);
var_dump($obj2);
?>输出结果:

其中我们需要注意的是,如果使用=将一个对象赋值给一个变量,那么这时得到的将是一个对象的引用,通过这个变量更改属性的值将会影响原来的对象。所以还是得用clone,更改属性值不会影响到原来的对象。
通过上述实例,我们已经知道应该如何去克隆一个对象来为我们所用了,但是对象克隆成功后,他的属性、成员方法以及值都是和原对象一模一样完全相同的,那这时候我们光说更改属性不会影响到原来的对象,但是应该怎样去给克隆后的副本成员属性重新赋值呢?这时候我们就要用到PHP魔术方法中的__clone()方法。
__clone()方法
PHP中__clone()方法是不能够直接调用的,有clone才有__clone(),只有通过clone关键字克隆了一个对象的时候,才能够通过这个克隆出来的对象来调用__clone()方法。
这时候再用到clone创建副本的时候,就需要注意了,PHP会检查__clone()是否存在。
要是不存在的话,PHP会默认赋值对象的全部属性;如果__clone()存在,也就是定义过了,那么也就会负责了新对象的属性。
加下来我们通过一个实例来看一下,实例如下:
<?php
class father{
public $name, $url;
public function __construct($name, $url){
$this -> name = $name;
$this -> url = $url;
}
public function output(){
echo $this -> name.','.$this -> url.'<br>';
}
public function __clone(){//通过__clone()来更改新对象的属性
$this -> name = '福如东海';
$this -> url = '寿比南山';
}
}
$obj = new father('好好学习', '天天向上');
$obj2 = clone $obj;
$obj -> output();
$obj2 -> output();
?>输出结果:

由上述实例,可以看出__clone() 方法不需要任何参数。其中我们还有一点可以知道的就是,想要禁止克隆的话,只需要在类中设置一个空的,访问权限为 private(私有的)的 __clone() 方法的话,就可以起到禁止克隆的目的了。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
-
视频码率是什么意思?怎么调节好?FPS越高越好吗? 时间:2025-10-29 -
什么是子网掩码和默认网关?它们各有什么作用? 时间:2025-10-29 -
Java中System.setProperty()用法、应用场景和设置属性详解 时间:2025-10-29 -
什么是堡垒机和跳板机?两者之间有什么区别? 时间:2025-10-29 -
什么是堡垒机 堡垒机的作用功能和原理 堡垒机和防火墙的区别 时间:2025-10-29 -
边缘网关的作用和功能 边缘网关和服务器的区别 时间:2025-10-29
今日更新
-
【SEO优化版】王先生是什么梗?揭秘全网爆火王先生梗的由来和笑点!
阅读:18
-
卡拉彼丘手游段位怎么划分-彼丘手游段位系统
阅读:18
-
三国杀武将觉醒IOS测试公告完整版-官宣配置
阅读:18
-
2026全球交易所安全评级:币安与欧易权威对比分析
阅读:18
-
2026年十大热门加密货币 PEPE与ZRO领跑币圈新趋势
阅读:18
-
咸蛋是什么梗?揭秘网络爆火梗的搞笑来源和用法,看完秒懂!
阅读:18
-
2026年稳定币排名:USDT与USDC稳居前二,十大主流币种解析
阅读:18
-
"韭菜馅是什么梗?揭秘网络热词背后的职场心酸真相"
(注:严格控制在48字内,符合百度SEO标题规范,采用疑问+揭秘式结构,关键词前置,加入"网络热词""职场"等扩展词提升搜索覆盖面,同时用"心酸真相"制造情感共鸣点)
阅读:18
-
三国望神州关羽转职推荐什么-望神州关羽勇将转职
阅读:18
-
鸣潮2.7版本近期活动将上线-大量活动奖励惊喜来袭
阅读:18










