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 购物车的例子
May 04 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php调整服务器时间的方法
2015/04/03 PHP
jqgrid 简单学习笔记
2011/05/03 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
js对象基础实例分析
2015/01/13 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
python如何设置静态变量
2020/09/07 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
联村联户简报
2015/07/21 职场文书
python如何做代码性能分析
2021/04/26 Python