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 即可.

     

  • 相关阅读:
    Flex 布局教程:语法篇(转载)
    【Go】【Http】Go实现Http相关知识点
    【Git】Git相关开发流程
    【Go】杂七杂八GoLang
    【Go】初识Context与Context键值对的可能情况
    jmeter-通过json提取器 提取所有数据 给下个接口使用
    C# 后台调用存储过程超时处理方法,
    IE11脚本错误-调用的对象无效-
    IE11浏览器arrt,全选反选失效无效修改方法
    如何学习计算机知识
  • 原文地址:https://www.cnblogs.com/lsqbk/p/10389303.html
Copyright © 2011-2022 走看看