zoukankan      html  css  js  c++  java
  • PHP写时复制, 变量复制和对象复制不同!!!

    2016年3月18日 15:09:28 星期五

    一直以为PHP对象也是写时复制.......

    其实: 

    PHP的变量是写时复制, 对象是引用的

    写时复制: $a = $b; 如果$b的内容不改变, $a和$b指向同一块内存; 如果$b内容改变了, $a的内容是不会改变的, 而是为$b重新申请空间存放数据

    但是!!!对象 $objTest1 = $objTest2; 这样写, 如果$objTest1或者$objTest2任何一个变了都会影响到对方

    测试代码如下

     1 <?php
     2 echo '<pre>';
     3 //////变量复制测试
     4 $a = 123;
     5 $b = $a;
     6 $b = 234;
     7 
     8 var_dump($a, $b); //int(123) int(234)
     9 //////对象复制测试
    10 Class Test
    11 {
    12     public $t = 123;
    13     public $tt = 234;
    14 }
    15 
    16 $objTest1 = new Test();
    17 $objTest2 = $objTest1;
    18 $objTest2->t = 'objTest2';
    19 var_dump($objTest1->t, $objTest2->t); // string(objTest2), sting(objTest2)
    20 
    21 $objTest3 = new Test(); //重新new, 而不是赋值
    22 $objTest3->tt = 'objTest3';
    23 var_dump($objTest1->tt, $objTest3->tt); // int(234), sting(objTest3)

    解决办法就是, 使用的时候重新new 或者在类里边实现__clone()方法

    另外: 放在数组里的对象也是全程引用的

    Finger PHP 框架

  • 相关阅读:
    MongoDB
    Mac下将Python2.7改为Python3
    Kafka
    Server 基础概念 备忘
    应用内支付
    Sign in with apple
    Linux三剑客grep/sed/awk
    React-Native中使用到的一些JS特性
    Date Picker控件:
    Picker View控件:
  • 原文地址:https://www.cnblogs.com/iLoveMyD/p/5292224.html
Copyright © 2011-2022 走看看