对象传值|学习笔记

简介: 快速学习对象传值

开发者学堂课程【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)对象通过实例化产生,如果赋值一个产生一个,可以产生很多,对象不可控。

相关文章
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
292 0
|
机器学习/深度学习 并行计算 PyTorch
【机器学习】探索GRU:深度学习中门控循环单元的魅力
【机器学习】探索GRU:深度学习中门控循环单元的魅力
|
前端开发 数据库
ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)
ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)
373 0
|
机器学习/深度学习 安全 Java
【网安AIGC专题10.19】论文6(顶会ISSTA 2023):提出新Java漏洞自动修复数据集:数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会
【网安AIGC专题10.19】论文6(顶会ISSTA 2023):提出新Java漏洞自动修复数据集:数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会
770 0
|
运维 关系型数据库 分布式数据库
PolarDB产品使用问题之分区表如何实现全文索引
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
JavaScript 测试技术 API
顺藤摸瓜🍉:用单元测试读懂 vue3 中的 defineComponent
顺藤摸瓜🍉:用单元测试读懂 vue3 中的 defineComponent
|
存储 Ubuntu 关系型数据库
在Ubuntu 14.04上安装Bacula服务器的方法
在Ubuntu 14.04上安装Bacula服务器的方法
165 0
|
传感器 人工智能 供应链
工业物联网(IIoT)及其在制造业的应用
【5月更文挑战第31天】工业物联网(IIoT)驱动制造业变革,实现设备预测性维护、生产流程优化、供应链智能化及质量控制。Python示例展示数据获取,但面临数据安全、设备兼容性挑战。IIoT将结合AI、大数据,推动制造业创新与转型,助力企业提升竞争力,为制造业可持续发展注入新动力。
348 0
|
SQL 存储 关系型数据库
DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016
DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016
641 0