首页> 基础笔记 >PHP基础学习 >面向对象 面向对象

PHP面向对象之克隆对象

作者:小萝卜 2019-09-02 浏览 866

简介PHP面向对象之克隆对象,有时可能需要根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。因为对象属于引用类型,普通的“=”号属于引用赋值,所有需要“clone”来复制一份。

PHP面向对象之克隆对象

有时可能需要根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。因为对象属于引用类型,普通的“=”号属于引用赋值,所有需要“clone”来复制一份。
格式:   $obj = new Class();
     $objectcopy=clone $obj;
魔术方法:_ _clone() 当执行clone克隆时会自动调用的方法,  主要用于解决对象中特殊属性的复制操作。

实例1;
 

<?php
    class Person {          
        private $name;     
        private $sex;           
        private $age;      
        public function __construct($name="", $sex="", $age=1) {       
            $this->name = $name;
            $this->sex = $sex;
            $this->age = $age;
        }
        public function __clone( ) {   //在对象克隆时自动调用此方法,用来为新对象重新赋值
            $this->name = "我是".$that->name."的副本";    //为副本对象中的name属性重新赋值
            $this->age = 10;    //为副本对象中的age属性重新赋值
        }       
       public function say( ) {                   
            echo "我的名字:".$this->name.",性别:".$this->sex.",年龄:".$this->age."<br>";
        }
    }
    $p1 = new Person("张三", "男", 20);  //创建对象并通过构造方法为对象中所有成员属性赋初值
    $p2 = clone $p1;         //使用clone克隆(复制)对象,并自动调用类中的__clone()方法 
    $p1 -> say();            //调用原对象中的说话方法,打印原对象中的全部属性值
    $p2 -> say();           //调用副本对象中的说话方法,打印出克隆对象的全部属性值

实例2:
 

<?php
//普通对象的复制(克隆)clone:
//普通对象的属性信息都是基本数据类型(标量、空或数组)
$s1 = new Stu("zhangsan",20);

//$s2 = $s1; //引用赋值
$s2 = clone $s1; //克隆一个对象

echo "<pre>";
var_dump($s1);
var_dump($s2);




class Stu{
    private $name;
    private $age;
    public function __construct($name,$age){
        $this->name = $name;
        $this->age = $age;
    }
    
    public function getInfo(){
        return $this->name.":".$this->age;
    }
}

很赞哦! (0)

文章评论

    高端网站建设