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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
PHP导出Excel实例讲解
Jan 24 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
Smarty环境配置与使用入门教程
May 11 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
Laravel框架源码解析之反射的使用详解
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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
PHP mkdir()定义和用法
2009/01/14 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
如何使用php实现评委评分器
2015/07/31 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
scrapy爬虫完整实例
2018/01/25 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python验证码截取识别代码实例
2020/05/16 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
面向对象编程的优势是什么
2015/12/17 面试题
为什么要有struct关键字
2012/05/08 面试题
三峡导游词
2015/01/31 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
PHP遍历数组的6种方式总结
2021/11/17 PHP
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript