首页 > 编程笔记 > PHP笔记 阅读:21

PHP clone关键字(克隆对象)

PHP 中,可通过 clone 关键字克隆一个对象,克隆后的对象相当于在内存中重新开辟了一个空间,克隆得到的对象拥有和原来对象相同的属性和方法,修改克隆得到的对象不会影响原来的对象。

请看下面的代码:
class father{
    protected $name = 'C语言中文网';
    function test(){
        echo "test";
    }
}
$obj = new father();
$obj_clone = clone $obj;
$obj_clone->name = 'PHP';
echo $obj->name;
?>
执行以上程序,将会打印出结果:

PHP

可见克隆得到的对象 $obj_clone 修改自己的属性名并不影响被克隆的对象。

注意,如果使用=将一个对象赋值给一个变量,那么这时得到的将是一个对象的引用,通过这个变量改变属性的值将会影响原来的对象。示例如下:
class father{
    public $name = 'http://c.biancheng.net/php/';
    function test(){
        echo "test";
    }
}
$obj = new father();
$obj_clone = $obj;
$obj_clone->name = 'PHP教程';
echo $obj->name, "<br />", $obj_clone->name;
执行以上程序的输出结果为:

PHP教程
PHP教程

__clone() 方法

可以使用 __clone() 魔术方法将克隆后的副本初始化,也可理解为当对象被克隆时自动调用这个方法。
class father{
    public $name = 'http://c.biancheng.net/php/';
    function test(){
        echo "test", "<br />";
    }
    function __clone(){
        echo "hello", "<br />";
        $this->name = 'PHP教程';
        //当克隆对象时, 克隆后对象得到的将是此处的name属性值
    }
}
$obj = new father();
$obj_clone = clone $obj;  //触发 __clone() 方法
echo $obj->name, "<br />", $obj_clone->name;
执行以上程序的结果为:

hello
http://c.biancheng.net/php/
PHP教程

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注

所有教程

优秀文章