`

php的对象clone使用

 
阅读更多

1。 

    PHP5中定义了一个__clone()将建立一个与原来的对象拥有相同属性和方法的对象。如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法。

 

      __clone()可以没有参数,它自动包含$this和$that两个指针。

$this 指向复本

$that指向原本

 

2。

如果是类里声明了新类

<?php
class ConcretePrototype{
    public function __construct() {
        $this->id = 1;
        $this->obj = new StdClass();
        $this->obj->name = 'dashu';
    }
    
    public function myclone() {
        return clone $this;
    }
   

    // 没有这个,$obj 就是引用,有了才是互相独立的两个,亲自试一下看看
    private function __clone() {
        $this->obj = clone $this->obj;
    }
}

$p = new ConcretePrototype();
$q = $p->myclone();
var_dump($p, $q);
$q->id = 2;
//改变$q的obj的属性,$p的相应属性不变化
$q->obj->name = 'xiayi';
var_dump($p, $q);

 

分享到:
评论

相关推荐

    PHP对象克隆clone用法示例

    在PHP中,对象的克隆可以通过使用`clone`关键字实现,而PHP的对象克隆分为浅克隆和深克隆两种。 浅克隆只是复制对象中的非对象和非资源类型的数据,如果对象中包含其他对象类型的属性,则复制的是这些属性的引用。...

    PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析

    PHP4面向对象功能一个很大的缺点,是将对象视为另一种数据类型,这使得很多常见的OOP方法无法使用,如设计模式。这些方法依赖于将对象作为引用传递给其他类方法,而不是作为值传递,而按值传递却是PHP的默认做法。...

    PHP编程中的__clone()方法使用详解

    当使用 `clone` 关键字复制一个对象时,系统会创建一个新的对象实例,通常被称为浅拷贝,这意味着原始对象的所有属性都会被复制到新对象中。但是,`__clone()` 方法允许开发者在克隆过程中进行自定义操作,例如修改...

    PHP对象相关知识总结

    本篇文章将深入探讨PHP对象的几个核心概念,包括对象的创建、传递、复制以及`__clone()`方法的使用。 首先,我们来看对象的传递。在PHP中,对象是通过引用传递的,但这里的"引用"并不完全等同于其他编程语言中的...

    php面向对象的教程

    使用`clone`关键字可以复制一个对象,但通常需要重写`__clone()`方法来处理一些特殊情况,比如重置对象状态或创建新实例的唯一标识符。 **示例**: ```php class Person { private $id; function __construct($...

    php5 类与对象

    PHP 对象克隆 `clone` 关键字与 `__clone()` 方法 `clone` 关键字用于创建对象的副本。`__clone()` 方法在对象被克隆时自动调用。 ```php class CloneExample { public $property; public function __clone() ...

    (第25讲) PHP面向对象开发的学习(九)

    在PHP中,`clone`关键字用于复制一个对象,创建其副本。这个副本与原对象有相同的属性和方法,但它们是独立的,修改副本不会影响原始对象。克隆常用于需要多个相似但不完全相同对象的场景,比如在数据库操作中,先...

    PHP面向对象技术_全面讲解

    12. 克隆(Cloning)允许创建一个对象的副本,保持原有对象的不变,使用`clone`关键字实现。 13. `__call`处理调用不存在的方法,可以捕获并处理错误,提供额外的功能。 14. 自动加载类(Autoloading)可以避免在...

    PHP面向对象程序设计之对象生成方法详解共4页.pdf.z

    总结,PHP面向对象程序设计中,对象的生成主要包括通过`new`关键字实例化、使用`clone`复制对象、以及利用序列化和反序列化进行对象的存储和恢复。此外,了解和应用工厂模式及单例模式能进一步提升代码的灵活性和...

    PHP面向对象技术(全面讲解)(高洛峰)

    通过`clone`关键字可以复制对象,创建一个新对象,但它保留了原始对象的所有属性。 #### 19. `__call`处理调用错误 `__call()`方法在尝试调用不存在的方法时被调用,可以用来处理未定义方法的调用。 #### 20. ...

    PHP 面向对象知识 值得一看

    如果需要创建一个独立的对象副本,可以使用**深拷贝**,这通常通过`clone`关键字实现。`clone $obj;`会创建一个新的对象,其属性值与原始对象相同,但不会共享引用,从而确保了独立性。 **克隆**是创建一个完全独立...

    PHP面向对象教程

    `clone`关键字用于复制对象,但可以重写`__clone()`方法来执行额外的初始化操作。 #### 19. __call处理调用错误 `__call()`方法用于处理对象上调用未定义或私有的方法的情况。 #### 20. 自动加载类 通过实现`__...

    PHP_面向对象教程

    通过`clone`关键字可以复制一个对象,同时创建一个新的实例。 #### 19. `__call` 处理调用错误 `__call()`方法在尝试调用不存在的方法时自动调用,允许程序员自定义处理逻辑。 #### 20. 自动加载类 通过实现`__...

    半天学完PHP面向对象教程(强力推荐).pdf

    7. 克隆对象:在PHP中,可以使用clone关键字来创建对象的一个新实例。克隆通常用于复制对象的属性到新的实例。 8. 自动加载类:PHP提供了自动加载功能,允许在需要对象时自动加载类文件,这可以通过魔术方法__...

    PHPweb2.0网站开发高级开发技术—PHP面向对象编程介绍

    - **克隆**:使用`clone`关键字创建对象的副本,保持原有的引用关系。 - **序列化**:将对象转换为字符串,便于存储或传输。使用`serialize()`方法进行序列化,`unserialize()`进行反序列化。 **9. 异常处理** PHP...

    php5面向对象

    但是,如果类中包含引用类型的属性,如数组或对象,克隆后的对象将共享这些引用,除非使用深拷贝或在`__clone()`魔术方法中显式复制这些属性。 例如: ```php class Product { public $name; public $options; ...

    php面向对象.docx

    - **克隆对象**:通过`clone`关键字,可以创建一个现有对象的副本,这个副本与原对象有相同的属性和方法,但它们在内存中是独立的,修改副本不会影响原对象。 通过这些基本概念,PHP开发者可以构建出更加灵活、可...

Global site tag (gtag.js) - Google Analytics