php对象复制、clone、浅复制与深复制实例详解
php对象复制、clone、浅复制与深复制实例详解
一、用clone(克隆)来复制对象
$obj1 = new Object();
$obj2 = clone $obj1;
clone方法会触发对象里定义的__clone魔术方法
clone操作有一个非常大的缺陷:使用clone操作复制对象时,当被复制的对象有对其它对象的引用的时候,引用的对象将不会被复制。
注:mysql返回的对象数组没有__clone方法的,用不了clone方法。报错:Message: __clone method called on non-object
二、利用串行化做深复制
PHP有串行化(serialize)和反串行化(unserialize)函数,只需要用serialize()将一个对象写入一个流,然后从流中读回对象,那么对象就被复制了。在JAVA语言里面,这个过程叫做“冷藏”和“解冻”。
$obj1 = new Object();
$obj2 = unserialize(serialize($obj1));//序列化然后反序列化
使用此方案时无法触发__clone魔术方法来完成一些附加操作,但会触发被复制对象和所有被引用对象的__sleep和__wakeup魔术方法。
$tmp = unserialize(serialize($datalist));
$omit = $tmp[0]->{$mtype};
用序列化的方法
====================
没添加前输出:
array(1) { [0]=> object(stdClass)#22 (1) { ["number"]=> string(11) "20190524049" } }
添加后输出:
array(1) { [0]=> object(stdClass)#22 (2) { ["number"]=> string(11) "20190524049" ["m54"]=> int(1) } }
-------------
$tmp = new ArrayObject($datalist);
$omit = $tmp[0]->{$mtype};
用这个new ArrayObject()
-------------
$tmp = array_merge(array(), $datalist);
$omit = $tmp[0]->{$mtype};
用合并到一个空数组里
-------------
$tmp = array();
foreach ($datalist as $key => $v) {
$tmp[$key] = clone $v;
}
$omit = $tmp[0]->{$mtype};
=================
php object(stdclass)转数组的函数
经常调用一个借口之后 返回的内容是json串,利用php函数json_decode() 解析json串之后得到的 数据类型为object(stdclass)
这是一个对象,要取其中的内容也可以 取得,利用object->属性 可以取得,但是习惯数组处理数据,下面是一个object(stdclass)转成 数组的函数。
function object_array($array){
if(is_object($array)){
$array = (array)$array;
}
if(is_array($array)){
foreach($array as $key=>$value){
$array[$key] = object_array($value);
}
}
return $array;
}
json_decode()想要解析返回结果为数组,需要加上第二个参数TRUE
stdclass 是zend的一个预留类,它是一个空类,没什么内容,php所有的类都继承了这个类,也就是说它是所有类的父类。
当PHP中一个类没有明确父类时,成为一个孤儿类时,会被stdclass收留的。
php对象复制、clone、浅复制与深复制实例详解的更多相关文章
- iOS 浅赋值、深复制、全然复制的知识点梳理验证(附加归档解档)
写于前: 在之前转载的一片文章中.文中对浅复制和深复制进行了具体的解读,同一时候还提到了深复制(one-level-deep copy).全然复制(true copy)的概念,并指出iOS开发中的深复 ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- Java中JSON字符串与java对象的互换实例详解(转)
http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...
- 浅谈python深复制与浅复制区别
话不多说,看代码
- 对象克隆(clone)实例详解
<?php class Staff { public $name; public $age; public $salary; public function __construct($name, ...
- PHP类和对象函数实例详解
1. interface_exists.class_exists.method_exists和property_exists: 顾名思义,从以上几个函数的命名便可以猜出几分他们的功能.我想这也是我随着 ...
- [js高手之路]原型对象(prototype)与原型链相关属性与方法详解
一,instanceof: instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型. 我在之前的两篇文章 [js高手之路]构造函数的基本特性与优缺点 [js高手 ...
- (转)Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- php:对象(object)数据类型实例详解
什么是对象? 对象是存储数据和有关如何处理数据的信息的数据类型.是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.一个对象由一组属性和对这组属性进行操作的一组服务组成. 语法 在 PHP ...
随机推荐
- JavaScript初探 三 (学习js数组)
JavaScript初探 (三) JavaScript数组 定义 创建数组 var 数组名 = [元素0,元素1,元素2,--] ; var arr = ["Huawei",&qu ...
- Linux(ubuntu) 一行代码搞定查看文件目录
ls 命令:• ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS 下的 dir 命令 ls命令之后加各种参数的作用: ls -a 显示指定目录下所有子 ...
- swift(五)swift的函数
/** * 函数的定义和调用 */ func showIntegerArray(array:[Int]) { for a in array { println("\(a)") } ...
- 安装新版Magisk卡在启动页面等问题以及解决办法
手持小米9,之前更新了新版本的Magisk Manager之后,发现手机再打开会一直卡在进入界面无法启动(如下图显示) 逛了逛Github.XDA.Stack Overflow等论坛,大致结论 ...
- 错误:shell 打开出现一大堆 错误 declare -x 之类的消息
像图中这种情况:这是什么情况呢? 原因:可能是你最近修改了.bashrc 或者 bash_profile 之类的文件.其中export 命令,要求export 命令写在单独的一行上: 就像下面这样,如 ...
- 图像检索——VLAD
今天主要回顾一下关于图像检索中VLAD(Vector of Aggragate Locally Descriptor)算法,免得时间一长都忘记了.关于源码有时间就整理整理. 一.简介 虽然现在深度学习 ...
- 【转】Python zip() 函数
转自:http://www.runoob.com/python/python-func-zip.html 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回 ...
- 手把手教你使用gogs搭建git私有仓库
本来想在 Github 上建一个私仓,但是发现只能设置 3 个贡献者. 国内的码云也只能设置 5 个. 无意间看到了使用 gogs 可以搭建私服,正好手头有空闲的服务器,于是开干! https://g ...
- 深度解密Go语言之unsafe
目录 指针类型 什么是 unsafe 为什么有 unsafe unsafe 实现原理 unsafe 如何使用 获取 slice 长度 获取 map 长度 map 源码中的应用 Offsetof 获取成 ...
- 解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果
解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果 一.前言 最初还是在抖音上看到可以使用简单地代码实现炫酷的网页效果的,但是想要找到可以运行的代码还是比较困难的,最近突然想起就在 ...