• php对象克隆


    思考:对象只能通过实例化产生,而且即便是将对象复制给变量,得到的还是同一个对象,如果有的时候需要得到新的对象,除了实例化之外还有其他办法?

    引入:对象理论上应该通过实例化来产生,这是对象产生的根本,但是有时候如果想在已有的对象上产生一个新的对象,可以通过克隆来实现。

    对象克隆

    定义:克隆对象clone,即通过已有的对象复制一个新的同样对象,但是两者之间并非用一个对象。

    1.对象克隆是通过clone关键字实现,即clone 对象

    <?php
    
    class student{
        public $name;
        public $age=32;
    
    }
    
    
    //实例化
        $s1=new student();
        echo $s1->age;   //输出32
    
    
        //clone
       $s2= clone $s1;
       echo $s2->age;   //返回32
       echo '<hr>';
       //新对象age属性重新赋值
       $s2->age=77;
       echo $s1->age;   //32
       echo $s2->age;  //77   并不是同一个对象。
    ?>

    2.对象在实例化的时候会自动调用存在的构造方法__construct(),同样的,在类的内部,php允许定义一个__clone的方法,在对象被克隆后,新克隆出来的对象会自动调用

    <?php
    
    class student{
        public $name;
        public $age=32;
        public function __clone(){
            var_dump($this);
            $this->age++;
        }
    
    }
    
    
    $s1=new student();
    $s2=clone $s1;
    echo $s2->age;   //输出33 并且var_dump()也输出了
    ?>

    3.如果不允许对象被克隆,可以将__clone()方法私有化(本质四不允许对象在外部被克隆)

    <?php
    
    class student{
        public $name;
        public $age=32;
        //私有化,表示不允许该对象在外部克隆
        private function __clone(){
         
        }
    
    }
    
    
    ?>

    总结:

      1.对象可以通过克隆来得到新的对象(以前只能实例化)

      2.克隆出来的对象会自动调用类中对应的__clone()方法(如果有该方法的话)

      3.可以通过私有化来实现禁止外部对象克隆

  • 相关阅读:
    【转】C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
    【转】第三方控件安装方法
    【jQuery插件】chackTextarea类似于新浪腾讯微博文本域字符数判断
    【转】关于wBox iFrame回调关闭问题的解决方案
    【转】jquery插件
    db4o助手 do4oHelper
    【转】C# 中文URL编码
    【转】C#集合之Hashtable
    【转】Web页面导出标准的Excel/Word/txt的代码实现
    jQuery图片居中裁切效果
  • 原文地址:https://www.cnblogs.com/xiaowie/p/12235711.html
Copyright © 2020-2023  润新知