美文网首页
克隆对象(clone)

克隆对象(clone)

作者: Do_you | 来源:发表于2018-03-01 22:17 被阅读0次
<?php
class MyClass {
public $var= 1;
}
$obj1 = new MyClass();
$obj2 = $obj1;
$obj2 ->var=2;
print $obj1->var;

在PHP4中。这个代码会打印出1,因为$obj2被赋予了$obj1的对象值,因此$obj2是$obj1的一个拷贝,从而改变了$obj2的时候$obj1不会被更改。但是在PHP5中,因为$obj1是一个对象句柄(它的id号),所以复制的到$obj2的是一个句柄。因此。运行这个代码片段后,结果输出的是2.

clone.png

下面的例子描述一个你可能要执行__clone()方法的一个典型的情况。假设你有一个对象,他存储着一个资源,例如一个文件句柄。你需要一个新的对象,而且他不能指向同一个文件句柄,而是打开一个新的文件从而拥有它自己的一个拷贝:

<?php
/**
* Created by PhpStorm.
* User: ZhouTengFu
* Date: 2018/2/13
* Time: 上午1:17
*/


class MyFile{

private $file_name;
private $file_handle = NULL;

function setFileName($file_name)
{
$this->file_name=$file_name;
}
function openFileForReading()
{
$this->file_handle = fopen($this->file_name,'r');
}
function __clone()
{
if ($this->file_handle){
//此时文件句柄重新生成
$this->file_handle = fopen($this->file_name,"r");
}
}
}

虽然这个代码只写了一部分,但是你可以看到一个控制克隆过程。在这个代码片段中,$file_name被原样的从对象中复制了,但是原对象有一个打开的文件句柄。因此新的对象拷贝将通过打开该文件创建一个他自己的指向该文件的句柄。

相关文章

  • 克隆对象(clone)

    在PHP4中。这个代码会打印出1,因为$obj2被赋予了$obj1的对象值,因此$obj2是$obj1的一个拷贝,...

  • 五、面试总结(五)

    对象 拷贝(clone) 如何实现对象克隆 深拷贝和浅拷贝区别 深拷贝和浅拷贝如何实现激活机制 写clone()方...

  • 相关jQuery方法的问题记录

    ①$.clone() 方法,克隆的节点对象必须加到文档当中,才可以对克隆体执行后续的动画操作

  • java.lang.Object.clone()笔记

    clone()可以对对象进行clone,通常我们会想要使用它去克隆一个对象,并且希望改变一个对象所以用的对象,不会...

  • Java☞克隆

    在基类Object中,有个clone方法,可产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,又...

  • Object类常用方法

    1. clone() 克隆的目的:快速创建一个已有对象的副本。 克隆的步骤: 创建一个对象将原有对象的数据导入到新...

  • Java对象克隆

    引自:Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨https:/...

  • php魔术方法总结使用

    (1)_clone克隆 实例化对象的赋值是传递的对象的地址索引,两个变量指向同一个对象,属于浅拷贝,而clone与...

  • java基础之克隆

    Java提高篇——对象克隆(复制) 浅克隆 被复制的类需要实现Clonenable接口(不实现的话在调用clone...

  • Web学习笔记 - 第009天

    创建对象 1. 构造器创建对象 2. 通过克隆创建对象(内存复制)实现Cloneable接口,重写clone()方...

网友评论

      本文标题:克隆对象(clone)

      本文链接:https://www.haomeiwen.com/subject/zpanxftx.html