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 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
php解析base64数据生成图片的方法
Dec 06 PHP
php实现文件预览功能
May 23 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 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
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
Python 流程控制实例代码
2009/09/25 Python
python数据结构树和二叉树简介
2014/04/29 Python
python实现定时播放mp3
2015/03/29 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python利用platform模块获取系统信息
2020/10/09 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
亿企通软件测试面试题
2012/04/10 面试题
《青蛙看海》教学反思
2014/04/23 职场文书
生物科学专业自荐书
2014/06/20 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
SQL中的连接查询详解
2022/06/21 SQL Server