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 相关文章推荐
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
php实现图片缩放功能类
Dec 18 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
Laravel 5框架学习之表单
Apr 08 PHP
composer.lock文件的作用
Feb 03 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 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读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
Python闭包实现计数器的方法
2015/05/05 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
python 写的一个爬虫程序源码
2016/02/28 Python
Django验证码的生成与使用示例
2017/05/20 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
QML实现钟表效果
2020/06/02 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
新领导上任欢迎词
2014/01/13 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
目标责任书格式范文
2015/05/11 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
P站美图推荐——变身女主角特辑
2022/03/20 日漫
Nginx动静分离配置实现与说明
2022/04/07 Servers