• __clone()方法和传址区别


    示例:

    <?php
        class Computer{
            public $name = '联想';
            public function _run(){
                return '运行中';
            }
        }
        $comp1 = new Computer();
        $comp2 = new Computer();
        $comp_1 = $comp1;
        $comp_2 = clone $comp2;
    ?>

    在上边示例中我们首先要理解:

    1 new Computer();创建了两个对象,分别保存在堆内存中不同区域,然后分别把两个对象的地址赋值给$comp1和$comp2(保存在栈内存中),所以呢两者中谁改变都不会影响对方

    2 $comp_1 = $comp1,由于$comp1是地址,所以是把地址赋值给了$comp_1,两者都是指向的同一个堆内存区域,两者其实是一个东西,只不过名字不同,殊途同归

    3 $comp_2 = clone $comp2 是克隆,字面意思,就是复制,把$comp2指向的堆内存复制一份,$_comp_2指向的就是复制的那块堆内存

    另外:在类中定义__clone()方法可以改变复制的默认行为,就是自己定义复制(自己定义的复制不一定是完全一样的再来一份,定义复制是翻倍还是其他什么都可以的)

         执行复制时会自动调用__clone()函数

    <?php
        class Computer{
            public $name = '联想';
            public function __clone(){
                $this->name = 'dell';
            }
        }
        $com1 = new Computer();
        $com2 = clone $com1;
        echo $com2->name;  //dell
    ?>
  • 相关阅读:
    python基础-元组类型
    python基础-列表类型
    python基础-字符串类型
    python基础-数字类型
    python基础-循环
    python基础-短路和拷贝
    python基础-人机交互和运算符
    python基础-垃圾回收机制
    python基础-python介绍
    UCF Local Programming Contest 2017(2020-4-6)
  • 原文地址:https://www.cnblogs.com/by-dxm/p/6221655.html
Copyright © 2020-2023  润新知