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


Posted in PHP onFebruary 26, 2021

变量赋值与对象赋值对比

<?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的内存关系图如下:

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

而代码 p − > n a m e = ′ j e s s e ′ ; 将 数 据 类 型 赋 值 给 p->name = 'jesse';将数据类型赋值给 p−>name=′jesse′;将数据类型赋值给p变量,通过$p修改对象内部的值成功,对比变量的传值方式,证明这是引用传值,内存关系图如下:

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

<?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是将对象拷贝一份?还是按引用传递呢?该代码内存关系如下:

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

所以,最后两个对象的属性值均被修改为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截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
php session应用实例 登录验证
Mar 16 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
php获取淘宝分类id示例
Jan 16 PHP
php强制用户转向www域名的方法
Jun 19 PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
基于laravel缓冲cache的用法详解
Oct 23 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 #PHP
PHP内存溢出优化代码详解
Feb 26 #PHP
php自动加载代码实例详解
Feb 26 #PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 #PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 #PHP
php中get_object_vars()在数组的实例用法
Feb 22 #PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 #PHP
You might like
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
python的移位操作实现详解
2019/08/21 Python
Python读取csv文件实例解析
2019/12/30 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
python实现坦克大战
2020/04/24 Python
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
2014年化验室工作总结
2014/11/21 职场文书
读后感作文评语
2014/12/25 职场文书
顶岗实习计划书
2015/01/16 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书