PHP对象克隆clone用法示例


Posted in PHP onSeptember 28, 2016

本文实例讲述了PHP对象克隆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);
echo '<br>';
var_dump($obj_b);

运行结果如下:

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

深克隆:一个对象的所有属性数据都彻底的复制,需要使用魔术方法__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;
 }
}
$obj_a = new A();
$obj_b = clone $obj_a;
$obj_a->val = 30;
$obj_a->b->val = 40;
var_dump($obj_a);
echo '<br>';
var_dump($obj_b);

运行结果如下:

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP安装攻略:常见问题解答(三)
Oct 09 PHP
APMServ使用说明
Oct 23 PHP
php 表单验证实现代码
Mar 10 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
组合算法的PHP解答方法
Feb 04 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
php四种基础算法代码实例
Oct 29 PHP
mac下安装nginx和php
Nov 04 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
Apr 09 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
PHP简单遍历对象示例
Sep 28 #PHP
PHP标准类(stdclass)用法示例
Sep 28 #PHP
PHP类型约束用法示例
Sep 28 #PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 #PHP
PHP序列化操作方法分析
Sep 28 #PHP
PHP类的特性实例分析
Sep 28 #PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 #PHP
You might like
php文件上传表单摘自drupal的代码
2011/02/15 PHP
PHP编程函数安全篇
2013/01/08 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
Javascript复制实例详解
2016/01/28 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
深入理解Node module模块
2018/03/26 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
Python中使用PDB库调试程序
2015/04/05 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
Python grpc超时机制代码示例
2020/09/14 Python
Python调用飞书发送消息的示例
2020/11/10 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
银行爱岗敬业演讲稿
2014/05/05 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
大学生社会实践感想
2015/08/11 职场文书