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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
PHP+MYSQL开发工具及资源收藏
Jan 02 PHP
PHP编程风格规范分享
Jan 15 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
详解Window7 下开发php扩展
Dec 31 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
PHP架构及原理知识点详解
Dec 22 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
关于crontab的使用详解
2013/06/24 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
js 判断 enter 事件
2009/02/12 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
python批量修改文件后缀示例代码分享
2013/12/24 Python
python用插值法绘制平滑曲线
2021/02/19 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
详解python中index()、find()方法
2019/08/29 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
详解Python中的Lock和Rlock
2021/01/26 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
道歉短信大全
2015/05/12 职场文书
《学会看病》教学反思
2016/02/17 职场文书