对象传值|学习笔记

简介: 快速学习对象传值

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段对象传值】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/711/detail/12665


对象传值

 

内容介绍:

一、对象传值

 

一、对象传值

1、目标

了解 PHP 中对象传值的方式

掌握方式之后可以灵活运用实现传值。

2、概念

对象传值:将保存对象的变量赋值给另外一个变量(一定是变量给变量,对象只有赋值没有传值,对象直接赋值给变量)

·在 PHP 中,对象的传值是引用传递的:即一个对象变量赋值给另外一个变量,两个变量指向同一个对象的内存地址,即只有一个对象。(不会产生新对象)

3、步骤

(1)定义类结构

(2)实例化产生对象,保存在变量中

(3)将保存对象的变量赋值给另外一个变量

4、示例

(1)对象传值就是保存对象的变量赋值给另外一个变量

class saler{} I

$s1=new saler();

$s2 = $s1;

先产生一个类得到一个对象,对象只能通过实例化产生,再把保存对象的变量赋值给另外一个变量,从而产生一个新的保存对象的变量。

代码 07pass.php:

<?Php

#对象传值

class Saler{}

$s1 = new Saler();

$s2 $s1;

var_dump($s1,$s2);

查看一下:

object(Saler)#1 (0){} object(Saler)#1 (0) {}

主体一样都是 Saler ,编号都为1 说明它们没有一个新的变量,本质是一个对象。

(2)对象传值是引用传递,不管对象赋值给多少个变量,内存中只有一个对象

# 证明

var_dump($s1,$s2); # 同一个对象

$s1->name ='saler': # 更改一个变量所保存对象的属性

echo $s2->name; # 输出 Saler

尝试修改另一个对象,如果彼此的修改会影响到对方说明操作的是同一块内存地址。

修改 s1 没有修改s2:

<?Php

#对象传值

class Saler{}

$s1 = new Saler();

$s2 = $s1;

$s1->name: 'Saler';

var_dump($s1,$s2);

结果:

object(Saler)#1(1){["name”]=>string(5)“Saler"}object(Saler)#1(1){[“name”]=>string(5)"Saler}

不管是 s1还是 s2都有了对应的属性,说明一个对象操作在另外一个对象里面也受影响,两个对象本质是一个对象,它们之间引用传递,到引用传递之后,对象不管怎么复制给自己,其他的变量都不会增加,新的变量都不会增加新的对象,可以放心的去传递不会影响到。

5、小结

(1)对象传值方式是引用传值,不论对象如何被赋值给其他变量,始终只有一个对象,能保证内存最优.

(2)对象通过实例化产生,如果赋值一个产生一个,可以产生很多,对象不可控。

相关文章
|
缓存 监控 前端开发
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
【4月更文挑战第30天】本文探讨了Flutter应用启动优化策略,包括理解启动过程、资源加载优化、减少初始化工作、界面布局简化、异步初始化、预加载关键数据、性能监控分析以及案例和未来优化方向。通过这些方法,可以缩短启动时间,提升用户体验。使用Flutter DevTools等工具可助于识别和解决性能瓶颈,实现持续优化。
437 0
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
279 0
|
前端开发 数据库
ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)
ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)
317 0
|
运维 关系型数据库 分布式数据库
PolarDB产品使用问题之分区表如何实现全文索引
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
JavaScript 测试技术 API
顺藤摸瓜🍉:用单元测试读懂 vue3 中的 defineComponent
顺藤摸瓜🍉:用单元测试读懂 vue3 中的 defineComponent
|
安全 网络协议 Linux
在CentOS 7上安装和使用Webmin的方法
在CentOS 7上安装和使用Webmin的方法
255 0
|
传感器 人工智能 供应链
工业物联网(IIoT)及其在制造业的应用
【5月更文挑战第31天】工业物联网(IIoT)驱动制造业变革,实现设备预测性维护、生产流程优化、供应链智能化及质量控制。Python示例展示数据获取,但面临数据安全、设备兼容性挑战。IIoT将结合AI、大数据,推动制造业创新与转型,助力企业提升竞争力,为制造业可持续发展注入新动力。
330 0
|
JavaScript 前端开发 内存技术
Vue入门:构建你的第一个Vue应用程序
【4月更文挑战第22天】Vue.js 入门教程:安装 Node.js 和 npm,使用 Vue CLI (`npm install -g @vue/cli`) 创建项目,选择预设或自定义配置。在 `src/components/` 创建 `HelloWorld.vue` 组件,显示数据属性。在 `App.vue` 中引入并注册组件,启动开发服务器 (`npm run serve`) 预览。开始你的 Vue 之旅!
256 2
|
存储 自然语言处理 编译器
【C语言】编译和链接深度剖析
【C语言】编译和链接深度剖析
220 2