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

 更新时间:2021年02月26日 15:56:12   作者:PHP开发社区  
这篇文章主要介绍了php的对象传值与引用传值代码实例讲解,感兴趣的同学可以多多学习下

变量赋值与对象赋值对比

<?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微信支付实例解析

    PHP微信支付实例解析

    这篇文章主要为大家详细介绍了PHP微信支付实例,包括PHP微信支付源码,PHP微信退款源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • php中使用preg_match_all匹配文章中的图片

    php中使用preg_match_all匹配文章中的图片

    有时候我们需要使用php获取网页中的图片并保存下来,这里我们可以使用preg_match_all用来匹配图片地址,需要的朋友可以参考下
    2013-02-02
  • ThinkPHP学习笔记(一)ThinkPHP部署

    ThinkPHP学习笔记(一)ThinkPHP部署

    我是在新浪的SAE上安装ThinkPHP,SAE引擎的,直接安装源代码包,然后启动Memcache和MySql服务就可以运行成功了。
    2014-06-06
  • PHP无限分类(树形类)

    PHP无限分类(树形类)

    PHP无限分类,Google一下就能找到很多相关资料,思路比较拉风的,也是用得比较多的就是分类表至少有id,pid,name三个字段,id自增表分类,pid为父分类,name为分类名,这样就构成了一棵树,如下,算是我查询分类表得到的结果集
    2013-09-09
  • 支付宝支付开发——当面付条码支付和扫码支付实例

    支付宝支付开发——当面付条码支付和扫码支付实例

    这篇文章主要介绍了支付宝支付开发——当面付条码支付和扫码支付实例,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • destoon公司主页模板风格的添加方法

    destoon公司主页模板风格的添加方法

    这篇文章主要介绍了destoon公司主页模板风格的添加方法,需要的朋友可以参考下
    2014-06-06
  • 检测codeigniter脚本消耗内存情况的方法

    检测codeigniter脚本消耗内存情况的方法

    这篇文章主要介绍了检测codeigniter脚本消耗内存情况的方法,实例分析了codeigniter中memory_usage方法及{ memory_usage}伪变量的使用技巧,需要的朋友可以参考下
    2015-03-03
  • thinkPHP的表达式查询用法详解

    thinkPHP的表达式查询用法详解

    这篇文章主要介绍了thinkPHP的表达式查询用法,结合实例形式分析了thinkPHP表达式查询的格式及相关运算符用法,需要的朋友可以参考下
    2016-09-09
  • laravel5环境隐藏index.php后缀(apache)的方法

    laravel5环境隐藏index.php后缀(apache)的方法

    今天小编就为大家分享一篇laravel5环境隐藏index.php后缀(apache)的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • PHP生成(支持多模板)二维码海报代码

    PHP生成(支持多模板)二维码海报代码

    本篇文章给大家分享了PHP生成支持多模板二维码海报代码,如果大家对此有需要,可以跟着参考学习下。
    2018-04-04

最新评论