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函数
Oct 09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
YII路径的用法总结
Jul 09 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
浅谈PHP的反射机制
Dec 15 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
PHP7 新增功能
Mar 09 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实现 上一篇、下一篇的代码
2012/09/29 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
python能做哪方面的工作
2020/06/15 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
圣诞节红领巾广播稿
2014/02/03 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
建议书范文
2015/02/05 职场文书
教师节老师寄语
2015/05/28 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技