`
d2hellen
  • 浏览: 105659 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

PHP 对象克隆 clone 关键字与 __clone() 方法

    博客分类:
  • PHP
阅读更多
clone 关键字用于克隆一个完全一样的对象,__clone() 方法来重写原本的属性和方法。

对象克隆

有的时候我们需要在一个项目里面使用两个或多个一样的对象,如果使用 new 关键字重新创建对象,再赋值上相同的属性,这样做比较烦琐而且也容易出错。PHP 提供了对象克隆功能,可以根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。

使用关键字 clone 来克隆对象。语法:
$object2 = clone $object;


例子:
<?php
class Person {
    private $name;
    private $age;

    function __construct($name, $age) {
        $this->name=$name;
        $this->age=$age;
    }

    function say() {
        echo "我的名字叫:".$this->name."<br />";
	echo "我的年龄是:".$this->age;
    }
}

$p1 = new Person("张三", 20);
$p2 = clone $p1;
$p2->say();
?>


运行例子,输出:
我的名字叫:张三
我的年龄是:20


__clone()

如果想在克隆后改变原对象的内容,需要在类中添加一个特殊的 __clone() 方法来重写原本的属性和方法。__clone() 方法只会在对象被克隆的时候自动调用。

例子:
<?php
class Person {
    private $name;
    private $age;

    function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    function say() {
        echo "我的名字叫:".$this->name;
	echo " 我的年龄是:".$this->age."<br />";
    }
    function __clone() {
        $this->name = "我是假的".$this->name;
        $this->age = 30;
    }
}

$p1 = new Person("张三", 20);
$p1->say();
$p2 = clone $p1;
$p2->say();
?>


运行例子,输出:
我的名字叫:张三 我的年龄是:20
我的名字叫:我是假的张三 我的年龄是:30
分享到:
评论
1 楼 meihaoderizi123 2012-08-14  
thanks,this  article is very helpful to me.

相关推荐

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

    当使用`clone`关键字时,PHP会创建一个现有对象的新实例,这个新实例与原对象具有相同的属性和方法。然而,它们之间是独立的,修改其中一个不会影响另一个。例如,如果我们有一个`Person`类,通过`clone`关键字创建...

    PHP对象克隆clone用法示例

    而深克隆则是通过覆盖`__clone()`方法,并在该方法中对对象`$b`调用`clone`关键字,从而使得`$obj_b`和`$obj_a`中的`$b`属性完全独立。 值得注意的是,在PHP的面向对象编程中,对象和数组在克隆行为上存在差异。...

    php实现对象克隆的方法

    接着通过clone关键字克隆了这个对象,并且通过__clone魔术方法对克隆对象的id进行了独立设置,使得克隆后的对象的id与原始对象的id不同。 7. 使用技巧: 当使用clone关键字克隆对象时,如果对象属性是基本数据类型...

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

    然而,当在 `Fruit` 类中添加了 `__clone()` 方法,并将 `name` 属性设置为 "克隆水果",就实现了克隆对象与原始对象的区分,克隆对象不再是简单的赋值复制,而是真正的新实例。 总结一下,`__clone()` 方法在PHP...

    php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误

    在这个例子中,我们创建了一个Person类,并通过clone关键字克隆了$p1对象,生成了$p2对象。两个对象的内容是相同的,但它们是独立的两个实例,对$p2的任何修改都不会影响$p1。 综上所述,__toString()、克隆对象...

    php5 类与对象

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

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

    一、类与对象 在PHP中,类是对象的蓝图,它定义了对象的属性(variables)和行为(methods)。对象是类的实例,它们包含了类中定义的所有属性和方法。要创建一个对象,首先需要定义一个类。以下是一个简单的类定义...

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

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

    PHP面向对象全面讲解1

    PHP还支持魔术方法(如__call、__callStatic、__set、__get等)以处理特殊场景,以及final关键字阻止子类覆盖父类方法,__toString方法让对象可以被当作字符串处理,克隆对象(clone关键字)创建对象的副本,以及...

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

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

    PHP 面向对象知识 值得一看

    在这个例子中,`__clone()`方法被用来在克隆时更新数据,使得克隆对象与原始对象有所区别。 在实际开发中,面向对象编程可以带来更好的代码组织和复用性。例如,通过定义一个产品类(`Product`),可以创建不同类型...

    php面对对象值单例模式_.docx

    4. **防止克隆**:为了确保单例的唯一性,还需要覆盖`__clone()`魔术方法,当尝试克隆单例对象时,触发错误。 在PHP中,单例模式的使用有以下几个好处: 1. **资源管理**:对于资源密集型操作,如数据库连接,单例...

    PHP_面向对象教程

    - **类与对象的关系**:类就像是一个模具,而对象则是由这个模具生产出来的具体实例。例如,在组装PC机的例子中,配置单就是类,而实际装好的电脑则是对象。 #### 3. 面向对象编程(OOP) 面向对象编程的核心在于...

    深入分析php之面向对象

    以上内容详尽地解释了PHP面向对象编程中的`final`关键字、`__toString`方法、接口与抽象类、对象引用传递、克隆对象以及魔术方法的概念和用法,这些都是理解和编写高效、灵活的PHP代码所必需的基础知识。

    钜码培训课程之php开发中原型模式的实现方法介绍.docx

    原型模式提供了一种解决方案:使用PHP的`clone`关键字来复制已有对象,而不是通过继承来创建新对象。这样,我们可以避免创建大量的类,同时保持代码的灵活性。例如,在我们的游戏中,我们可以创建一个基础的海洋类...

    php学习文档.pdf

    10. 对象克隆:通过`__clone`关键字实现对象的复制,保留原有对象的状态。 11. 访问控制:PHP5引入了公共、私有和受保护的访问控制,增强了封装性。 12. 接口(Interfaces):接口定义了方法的签名,但不包含具体...

    PHP 魔术方法整理

    当使用`clone`关键字复制一个对象时,`__clone()` 方法会被调用。这对于复制复杂的对象结构或确保克隆后的新对象是独立的副本非常有用。 **示例代码:** ```php class MyClass { public function __clone() { ...

    PHP_面向对象教程(强力推荐)

    **类与对象的关系**:类就像是一个模具,而对象则是由这个模具制造出来的实体。例如,假设有一款汽车的设计图纸(类),根据这张图纸可以生产出许多辆相同的汽车(对象)。这些汽车虽然外表和功能相同,但每辆车都是...

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

    在本讲中,我们将深入探讨PHP面向对象编程的四个关键概念:对象描述的配置、对象方法的异常处理、克隆对象的应用以及自动载入对象的方法。这些知识点是PHP开发中的重要组成部分,对于提升代码的组织结构和可维护性至...

Global site tag (gtag.js) - Google Analytics