PHP对象克隆clone用法示例
PHP对象克隆:浅克隆与深克隆详解
在PHP中,对象克隆是一个重要的概念,涉及到浅克隆和深克隆两种形式。本文将通过实例详细解释这两种克隆方式的特点和实现方法。
一、浅克隆(Shallow Clone)
浅克隆只会复制对象中的非对象和非资源数据。如果对象中属性存储的是对象类型,则会出现克隆不完全的情况。
示例:
```php
class B {
public $val = 10;
}
class A {
public $val = 20;
public $b;
public function __construct() {
$this->b = new B();
}
}
$obj_a = new A();
$obj_b = clone $obj_a;
$obj_a->val = 30;
$obj_a->b->val = 40;
var_dump($obj_a); // 修改了$obj_a的$val和$b的$val属性
echo '
';
var_dump($obj_b); // $obj_b的$val属性未被修改,但$b的$val属性被修改,说明只进行了浅克隆
```
运行结果:
```css
object(A)[1] public 'val' => int 30 public 'b' => object(B)[2] public 'val' => int 40
object(A)[3] public 'val' => int 20 public 'b' => object(B)[2] public 'val' => int 40
```
二、深克隆(Deep Clone)
深克隆则是一个对象的所有属性数据都彻底复制。为了实现深克隆,需要使用魔术方法`__clone()`,并在里面实现克隆。
示例:
```php
class B {
public $val = 10;
}
class A {
public $val = 20;
public $b;
public function __construct() {
$this->b = new B();
}
public function __clone() {
$this->b = clone $this->b; // 对$b进行深克隆
}
}
$obj_a = new A();
$obj_b = clone $obj_a; // 使用clone关键字进行对象克隆
$obj_a->val = 30;
$obj_a->b->val = 40; // 修改$obj_a的$val和$b的$val属性
var_dump($obj_a); // 查看修改后的$obj_a属性
echo '
';
var_dump($obj_b); // 查看克隆后的$obj_b属性,发现其属性值未被修改,实现了深克隆
```
运行结果:
```css
object(A)[1] public 'val' => int 30 public 'b' => object(B)[2] public 'val' => int 40
object(A)[3] public 'val' => int 20 public 'b' => object(B)[4] public 'val' => int 10 // $obj_b的属性和$obj_a的$b属性是独立的,实现了深克隆
```
通过对浅克隆和深克隆的讲解,相信大家对PHP对象克隆有了更深入的了解。如需了解更多关于PHP的内容,请查看相关专题。希望本文能对大家进行PHP程序设计时有所帮助。
编程语言
- PHP对象克隆clone用法示例
- 详解使用vue-cli脚手架初始化Vue项目下的项目结构
- 高效利用Angular中内置服务$http、$location等
- vue轮播图插件vue-awesome-swiper的使用代码实例
- phpstudy2018升级MySQL5.5为5.7教程(图文)
- thinkPHP中session()方法用法详解
- jsp 中HttpClient中的POST方法实例详解
- 二进制交叉权限微型php类分享
- laravel 实现关闭CSRF(全部关闭、部分关闭)
- 多种方法实现当jsp页面完全加载完成后执行一个
- Vue.js项目中管理每个页面的头部标签的两种方法
- Yii2框架自定义类统一处理url操作示例
- Visual Studio 2015安装步骤详解
- jquery中EasyUI使用技巧小结
- jQuery滑动效果实现方法分析
- javascript 数字的正则表达式集合