对象传值|学习笔记

简介: 快速学习对象传值

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

相关文章
|
7月前
|
XML Java 数据库连接
Mabtis传值方式
Mabtis传值方式
360 0
|
8月前
|
C++ Python
Python函数参数传递:传值还是传引用
Python函数参数传递:传值还是传引用
40 0
|
Java
08 java中方法传参的传值与传址问题
java的值传递与址传递 问题:在java中方法传参到底是值传递还是址传递?
80 0
08 java中方法传参的传值与传址问题
|
存储 PHP 开发者
参数传值方式|学习笔记
快速学习参数传值方式
84 0
参数传值方式|学习笔记
|
PHP 开发者
变量传值| 学习笔记
快速学习变量传值。
64 0
|
存储 Java Go
函数参数的传递方式 | 学习笔记
简介:快速学习函数参数的传递方式
74 0
函数参数的传递方式 | 学习笔记
|
小程序 JavaScript
小程序子组件给父组件传值并且调用方法
小程序子组件给父组件传值并且调用方法
|
编译器 C++
C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨
C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨
234 0
|
Java
Java - 参数传递(传值、传址/引用)
Java - 参数传递(传值、传址/引用)
306 0
Java - 参数传递(传值、传址/引用)
|
Java
java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:是值传递。Java编程语言只有值传递参数。 当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
12236 0