zoukankan      html  css  js  c++  java
  • 克隆对象__clone()方法

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?
    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指向原本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?
    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
  • 相关阅读:
    Largest Rectangle in Histogram
    Valid Sudoku
    Set Matrix Zeroes
    Unique Paths
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Path Sum II
    Path Sum
    Validate Binary Search Tree
    新手程序员 e
  • 原文地址:https://www.cnblogs.com/hh1137054072/p/7442882.html
Copyright © 2011-2022 走看看