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

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教程

爱面试的程序媛,一个分享面试经验的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,定时分享程序员面试的那点事。

面试如何造火箭?工作如何拧螺丝?都在这个公号哦。

扫描二维码关注公众号,免费领取价值 1000 元的求职面试资料(限时免费)!

当你决定关注「爱面试的程序媛」,你已然超越了90%的程序员!

爱面试的程序媛二维码
微信扫描二维码关注

所有教程

优秀文章