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

     

  • 相关阅读:
    开发中的一些总结。。。
    Directory Listing Denied错误
    webservice的一些使用心得。。
    vs2005 sp1 补丁后,不能初始化
    谈C/C++指针精髓
    CString 的函数
    javaScript 中 call 函数的用法说明 & 继承
    条款12: 尽量使用初始化而不要在构造函数里赋值(effectiveC++)
    js日期时间函数(经典+完善+实用)
    学习之路一 记录学习中的手记
  • 原文地址:https://www.cnblogs.com/lsqbk/p/10389303.html
Copyright © 2011-2022 走看看