变量赋值与对象赋值对比

 <?php      // 声明一个变量并赋值      $a = 1;      // 将数据类型的值 赋值 给一个变量      $b = $a;        // 修改$a的值      $a = 2;      // $a和$b是两个独立的内存空间修改其中一个另一个不受影响     echo $b; // 1       class Person    {         public $name;         public $age;    }     // 将对象类型的数据 赋值 给一个变量     $p = new Person;     // 通过对属性修改值,来确定面向对象中 对象的传值方式     $p->name = 'jesse';     // 若是成功修改值,则是引用传值      echo $p->name; // jesse ?>

案例解释:

在这里通过变量的赋值方式 与 对象的赋值方式方式相对比,代码第5行中的赋值方式为“拷贝赋值”,故在修改其源值($a的值)的情况下,$b的值不受影响。$a与$b的内存关系图如下:

对象-2.jpg

而代码20行将数据类型赋值给$p变量,通过$p修改对象内部的值成功,对比变量的传值方式,证明这是引用传值,内存关系图如下:

对象-3.jpg

而代码20行将数据类型赋值给$p变量,通过$p修改对象内部的值成功,对比变量的传值方式,证明这是引用传值,内存关系图如下:

<?php     class Person    {        public $name;        public $age;        // 将对象类型的数据 赋值 给一个变量         $p = new Person;         // 通过对属性修改值,来确定面向对象中 对象的传值方式        $p->name = 'jesse';        // 将对象赋予另一变量        $m = $p;        // 另一变量修改属性值        $m->name = 'Marry';         // 输出源变量 赋值变量访问内部属性的结果        echo $p->name, $m->name;    }?>

第12行代码为本篇文章的最“点睛”的代码,等号右边为是一个对象,左边是一个变量,那么犀利的问题来了,$m是将对象拷贝一份?还是按引用传递呢?该代码内存关系如下:

对象-4.jpg

所以,最后两个对象的属性值均被修改为Marry!!!

那按引用传值会是怎么个情况?

 <?php      class Person     {         public $name;          public $age;      }      // 将对象类型的数据 赋值 给一个变量      $p = new Person;      // 通过对属性修改值,来确定面向对象中 对象的传值方式     $p->name = 'jesse';     // 将对象赋予另一变量     $m = &$p;     // 另一变量修改属性值     $m->name = 'Marry';     // 输出源变量 赋值变量访问内部属性的结果     echo $p->name, $m->name; ?>

对象-5.jpg

更多相关内容请访问PHP中文网:PHP视频教程

更多相关文章

  1. php检查变量是否存在
  2. 简单记录PHP的超全局变量$_SERVER
  3. 深入理解PHP原理之变量作用域(Scope in PHP)
  4. 深入理解PHP原理之变量(Variables inside PHP)
  5. PHP变量的初始化以及赋值方式介绍
  6. PHP 闭包之变量作用域
  7. PHP 变量的四大作用域
  8. 关于php中变量的初始化以及赋值方式的介绍
  9. golang 发送post请求 其body中json对象使用变量作为value

随机推荐

  1. Android消息机制(基于源码解析)
  2. android中使用URL Scheme方式启动app
  3. Android(安卓)Studio 中setOnClickListen
  4. Android系列之Message机制的灵活应用
  5. [原]Android有用代码片断(六)
  6. Android(安卓)EditText 自定义带删除按钮
  7. 14、NFC技术:使用Android Beam技术传输文
  8. Android彻底组件化—如何使用Arouter
  9. Android+JavaEE实现登录注册(2)——Android
  10. Android自定义view中的layout()