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
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
PHP设计模式之命令模式示例详解
Dec 20 PHP
PHP使用非对称加密算法RSA
Apr 21 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的分页功能
2007/03/21 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
JavaScript 大数据相加的问题
2011/08/03 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
深入解读Python解析XML的几种方式
2016/02/16 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
Atom的python插件和常用插件说明
2018/07/08 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
新闻编辑自荐信
2013/11/03 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
离婚答辩状范文
2015/05/22 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书