zoukankan      html  css  js  c++  java
  • PHP面向对象魔术方法之__clone函数

    基本介绍

    当我们需要将一个对象完全的赋值一份, 保证两个对象的属性和属性值一样,但是他们的数据库空间独立,则可以使用对象克隆。

     

    <?php
        header('content-type:text/html;charset=utf-8');
        //__clone 魔术方法
    
        class Sheep{
            public $name;
            protected $food;
    
            public function __construct($name, $food){
                $this->name = $name;
                $this->food = $food;
            }
    
            //__clone  的魔术方法
    
            //如果我们希望阻止克隆, 则将该__clone 声明为private即可
            //在很多设计模式中,就会使用到这个特点-比如说,单例模式
    
            public  function __clone(){
                //在克隆一个对象时,可以在这个 __clone 函数中去修改某个属性(如果有必须要的)
                //$this->food = '青草';
                echo '<br> __clone被调用';
            }
        }
    
        $sheep1 = new Sheep('多利', '青草');
    
        //看一下对象的赋值方式
        $sheep2 = $sheep1;
    
        //讲一下对象的比较
        
        //当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等
    
        if($sheep2 == $sheep1 ){
            echo '<br> $sheep2 == $sheep1';
        }
    
        //而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
        if($sheep2 === $sheep1 ){
            echo '<br> $sheep2 === $sheep1';
        }
    
    //    $sheep3 = new Sheep('多利', '<。)#)))≦');
        //对象的克隆, 会触发__clone 的魔术方法
        $sheep3 = clone $sheep1;
    
        if($sheep3 == $sheep1){
            echo '<br> $sheep3 == $sheep1';
        }
    
        if($sheep3 === $sheep1){
            echo '<br> $sheep3 === $sheep1';
        }

     

    说明

    (1) 当我们 $对象1 = clone $对象2, 会触发 __clone 方法

    (2) 如果我们希望在克隆时,修改某个属性,则在__clone方法中去修改即可

    (3) 如果我们希望阻止克隆,只需要将 __clone 魔术方法申明为private 即可.

     

  • 相关阅读:
    JS client(X,Y)、screen(X,Y)、page(X,Y)的区别
    jS冒泡优化
    CSS盒子模型
    CSS段落对齐方式
    CSS引入方式
    CSS/让一个盒子消失的5中方法
    css垂直居中方法
    【数论】BSGS
    【线段树】树套树 树状数组套主席树
    【树】动态树 LCT
  • 原文地址:https://www.cnblogs.com/lsqbk/p/10389303.html
Copyright © 2011-2022 走看看