php的对象传值与引用传值代码实例讲解

admin3年前PHP教程98

变量赋值与对象赋值对比


<?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
 
?>

案例解释:

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


而代码 p − > n a m e = ′ j e s s e ′ ; 将 数 据 类 型 赋 值 给 p->name = 'jesse';将数据类型赋值给 p−>name=′jesse′;将数据类型赋值给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;
  }
 
?>

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


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

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


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

到此这篇关于php的对象传值与引用传值代码实例讲解的文章就介绍到这了,更多相关php的对象传值与引用传值内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

分析PHP的垃圾回收机制

如果用过C语言,那么申请内存的方式是malloc或者是calloc,然后你用完这个内存后,一定不要忘了用free函数去释放掉,这就是传说中手动垃圾回收,一般都是扫地神僧用这种方式。很多高层次语言中,你...

显卡服务器的普遍应用租用美国显卡服务器如何使用

显卡服务器也称为GPU服务器。GPU服务器是计算机科学技术领域中使用的计算机及其配套设备。其主要功能有:地理空间数据的3D可视化、视频稳定、滤波、马赛克、转码等应用研究和教育,如成像与处理等天体物理学...

php聚合式迭代器的基础知识点及实例代码

说明1、实现其他迭代器功能的接口,相当于在其他迭代器上安装一个外壳,只有一种方法。2、聚合迭代器可以与许多迭代器结合,实现更高效的迭代。实例class MainIterator implements...

马来西亚服务器为什么比美国服务器贵

马来西亚服务器为什么比美国服务器贵?有几个可能的原因导致马来西亚服务器比美国服务器贵:市场需求:马来西亚可能没有像美国那么多的服务器提供商和数据中心。由于市场竞争较少,价格可能会相对较高。劳动力成本:...

如何选择合适的香港多ip服务器租用

选择合适的香港多IP服务器租用服务需要考虑许多因素。以下是一些要考虑的因素:IP地址数量:您需要确定您的应用程序需要多少IP地址,并选择服务器提供商提供的IP地址数量。带宽:您需要考虑您的应用程序需要...

游戏服务器需要配置显卡吗新加坡显卡服务器租用需要注意的有哪些

游戏服务器需要配置显卡吗?游戏行业一直以来对服务器的要求相对较高,无论是从网络延迟还是稳定性都有严格的要求,今天我就来介绍一些关于游戏服务器所需要的条件。1.处理器性能要高高速处理器:整个服务器中的重...