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实现Redis单据锁以及防止并发重复写入

    PHP实现Redis单据锁以及防止并发重复写入

    本篇文章给大家分享了PHP实现Redis单据锁以及如何防止并发重复写入的方法,对此有需要的朋友参考学习下。
    2018-04-04
  • PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法

    PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法

    昨天想批处理以前下载的一堆文件,把文件里的关键内容用正则匹配出来,集中处理。在操作文件时遇到一个问题,就是windows操作系统中的编码问题.
    2015-11-11
  • php打乱数组二维数组多维数组的简单实例

    php打乱数组二维数组多维数组的简单实例

    下面小编就为大家带来一篇php打乱数组二维数组多维数组的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 使用Yii2实现主从数据库设置

    使用Yii2实现主从数据库设置

    大家应该都知道,当项目做大了,数据库主从还是不可少的。使用Yii框架开发,如何设置数据库的主从呢?其实很简单。下面这篇文章就给大家详细介绍了使用Yii2实现主从数据库设置的方法,文中介绍的很详细,相信对大家的理解和学习很有帮助,下面来一起学习学习吧。
    2016-11-11
  • 最新制作ThinkPHP3.2.3完全开发手册

    最新制作ThinkPHP3.2.3完全开发手册

    本文给大家分享的是作者花了3个多小时制作完成的ThinkPHP3.2.3完全开发手册,非常的细致全面,有需要的小伙伴可以参考下
    2015-11-11
  • laravel 数据迁移与 Eloquent ORM的实现方法

    laravel 数据迁移与 Eloquent ORM的实现方法

    laravel 提供了很实用的 Eloquent ORM 模型类,简单、直观的与数据库进行交互。同时使用数据迁移管理数据库,可以与团队进行共享以及编辑,本文详细的介绍了laravel 数据迁移与 Eloquent ORM的实现方法,感兴趣的可以了解一下
    2019-04-04
  • 2014最热门的24个php类库汇总

    2014最热门的24个php类库汇总

    本文给大家分享24个免费并且高质量的PHP类库,也是2014年比较热门流行的类库,这里推荐给大家。
    2014-12-12
  • Yii实现多数据库主从读写分离的方法

    Yii实现多数据库主从读写分离的方法

    这篇文章主要介绍了Yii实现多数据库主从读写分离的方法,通过针对Yii数据库类的扩展实现多数据库主从读写的分离功能,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • PHP接口类(interface)的定义、特点和应用示例

    PHP接口类(interface)的定义、特点和应用示例

    这篇文章主要介绍了PHP接口类(interface),结合实例形式分析了PHP接口类(interface)的基本功能、定义、特点、用法与相关注意事项,需要的朋友可以参考下
    2020-05-05
  • PHP实现会员注册系统

    PHP实现会员注册系统

    这篇文章主要为大家详细介绍了PHP实现会员注册系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01

最新评论