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