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
php array_flip() 删除数组重复元素
Jan 14 PHP
IP138 IP地址查询小偷实现代码
Feb 15 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
php运行时动态创建函数的方法
Mar 16 PHP
php检测url是否存在的方法
Apr 14 PHP
PHP通过API获取手机号码归属地
May 28 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
laravel5表单唯一验证的实例代码
Sep 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
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
python使用mailbox打印电子邮件的方法
2015/04/30 Python
Python队列的定义与使用方法示例
2017/06/24 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Python面向对象实现方法总结
2020/08/12 Python
送给程序员的20个Java集合面试问题
2014/08/06 面试题
2014年机关后勤工作总结
2014/12/16 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
国际贸易实训总结
2015/08/03 职场文书
小学四年级作文之写景
2019/08/23 职场文书
七年级作文之环保作文
2019/10/17 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书