• PHP面向对象(OOP):克隆对象__clone()方法


    有的时候我们需要在一个项目里面,使用两个或多个一样的对象,如果你使用“new”关键字重新创建对象的话,再赋值上相同的属性,这样做比较烦琐而且也容易出错,所以要根据一个对象完全克隆出一个一模一样的对象,是非常有必要的,而且克隆以后,两个对象互不干扰。

    在PHP4中我们使用“clone”这个关键字克隆对象;

    <?
    class Person
    {
        //下面是人的成员属性
        var $name;    //人的名子
        var $sex;    //人的性别
        var $age;    //人的年龄
    
        //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
        function __construct($name = "", $sex = "", $age = "") {
            $this->name=$name;
            $this->sex=$sex;
            $this->age=$age;
        }
    
        //这个人可以说话的方法,说出自己的属性
        function say() {
            echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age . "<br>";
        }
    }
    
    $p1 = new Person("张三", "男", 20);
    
    //使用“clone”克隆新对象p2,和p1对象具有相同的属性和方法。
    $p2=clone $p1;
    $p2->say();
    ?>

     PHP4定义了一个特殊的方法名“__clone()”方法,是在对象克隆时自动调用的方法,用“__clone()”方法将建立一个与原对象拥有相同属 性和方法的对象,如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法,  “__clone()”方法可以没有参数,它自 动包含$this和$that两个指针,$this指向复本,而$that指向原本

    <?
    class Person
    {
        //下面是人的成员属性
        var $name;    //人的名子
        var $sex;    //人的性别
        var $age;    //人的年龄
    
        //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
        function __construct($name = "", $sex = "", $age = "") {
            $this->name=$name;
            $this->sex=$sex;
            $this->age=$age;
        }
    
        //这个人可以说话的方法, 说出自己的属性
        function say() {
            echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age . "<br>";
        }
    
        //对象克隆时自动调用的方法, 如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法
        function __clone() {
    
            //$this指的复本p2, 而$that是指向原本p1,这样就在本方法里,改变了复本的属性。
            $this->name = "我是假的 $that->name";
            $this->age = 30;
        }
    
    }
    
    $p1 = new Person("张三", "男", 20);
    $p2 = clone $p1;
    $p1->say();
    $p2->say();
    ?>

    上例输出:

    我的名子叫:张三 性别:男 我的年龄是:20
    我的名子叫:我是假的张三 性别:男 我的年龄是:30
  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/4720183.html
Copyright © 2020-2023  润新知