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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
php 一元分词算法
Nov 30 PHP
php递归json类实例
Dec 02 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
php如何获取Http请求
Apr 30 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
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
修改发贴的编辑功能
2007/03/07 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
Python银行系统实战源码
2019/10/25 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
python3 求约数的实例
2019/12/05 Python
Python 音频生成器的实现示例
2019/12/24 Python
python中取绝对值简单方法总结
2020/07/24 Python
Jar包的作用是什么
2014/03/30 面试题
护士自我介绍信
2014/01/13 职场文书
师德建设实施方案
2014/03/21 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
安全责任书模板
2014/07/22 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
2014年行政部工作总结
2014/11/19 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS