`
d2hellen
  • 浏览: 100309 次
  • 性别: 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.

相关推荐

    php5 类与对象

    php5 类与对象 个人总结与简单的例子,... PHP 对象克隆 clone 关键字与 __clone() 方法 17. PHP 对象的存储与传输(序列化 serialize 对象) 18. php 设计模式:工厂模式和单例模式 19.对象对象迭代 20 this关键字

    php封装的mysqli完整类库

    介绍php封装的mysqli类,结合实例形式分析了php针对mysqli操作类的定义与使用技巧,掌握满足单例模式的...(3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象的操作

    php基于单例模式封装mysql类

    介绍了php基于单例模式封装mysql类,结合完整实例形式分析了php使用单例模式封装的mysql类定义与使用...(3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象的操作

    php封装的mysqli完整类库.zip

    介绍php封装的mysqli类,结合实例形式分析了php针对mysqli操作类的定义与使用技巧,掌握满足单例... (3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象的操作

    php基于单例模式封装mysql类.zip

    介绍了php基于单例模式封装mysql类,结合完整实例形式分析了php使用单例模式封装的mysql类... (3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象的操作

    PHP设计模式之原型设计模式原理与用法分析

    PHP有一个内置的克隆方法__clone()可以在设计模式中使用,但是不能直接访问,使用clone关键字即可。克隆不会启动构造函数。 二、什么时候使用原型设计模式 如果一个项目要求你创建某个原型对象的多个实例,就可以...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向对象等内容。...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向对象等内容。...

    php封装的mysqli类完整实例

    本文实例讲述了php封装的...(3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象的操作 */ class ConnectMysqli{ //私有的属性 private static $dbcon=false;

    meff:MEFF-Magento扩展文件查找器

    简单克隆此仓库,并通过命令行运行meff.php文件,将扩展名和完整路径传递给您的Magento根目录。 php meff.php Extension_Name MagentoDir # or if you are in the current working directory php meff.php ...

    gldoteater:C ++游戏

    食人鱼Pac克隆要求Windows XP或以上安装这是您想要的文件: 此处的地图编辑器:关键字词Windows 32 API 2人2人联网C ++ 的OpenGL 国防部促进TCP / UDP 吉特Visual Studio社区先用Dev-C ++,再用WxDev-C ++,再用...

Global site tag (gtag.js) - Google Analytics