Home >Backend Development >PHP Tutorial > PHP 对象克隆 clone 关键字与 _clone() 步骤

PHP 对象克隆 clone 关键字与 _clone() 步骤

WBOY
WBOYOriginal
2016-06-13 13:06:27905browse

PHP 对象克隆 clone 关键字与 __clone() 方法
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.
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn