图文解析PHP对象的赋值操作是“传值”还是“传址”

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 通过本文,我们一起分享了在PHP中对象的赋值操作,传递的是对象地址,而不是复制对象。PHP中可以使用clone操作符来复制对象。

我们知道,变量默认总是传值赋值。也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。


举个简单例子:


1
2
3
4
5
6
7
8
<?php 
$a  'hello world' ;
$b  $a ;
$a  'bey world' ;
 
var_dump( $a );
var_dump( $b );
?>


此时的$b = $a,在内存中的存贮大致是这样子的:

001.png


但是当一个对象被实例化后,对象的传递并非传值,而是传递该对象的地址。也就是说,不会复制整个对象,因为这样做既耗时又耗内存。

同样举个简单例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class  Person
{
     public  $name ;
     public  $age ;
}
 
$a  new  Person();
$b  $a ;
$c  = & $a ;
$a ->name =  'gavin' ;
$a  = null;
 
var_dump( $b );
var_dump( $a );
var_dump( $c );


执行结果:


object(Person)#1 (2) { ["name"]=> string(5) "gavin" ["age"]=> NULL } 
NULL 
NULL


上面例子中变量的操作过程大致如下:


$b = $a;
$c =& $a;


当把一个对象实例赋给一个新变量时,新变量会访问同一个实例。

引用赋值(&)意味着新的变量引用了原始变量,换言之,成为其"别名" 或者 "指向"。改动新的变量将影响到原始变量,反之亦然。


002.png


$a = null;


003.png


也许你会问,既然直接赋值不是复制对象,那如何才能复制对象呢?PHP里克隆复制对象使用clone操作符:


1
2
$f  new  Person();
$b  clone  $f //创建一个对象副本


小结

通过本文,我们一起分享了在PHP中对象的赋值操作,传递的是对象地址,而不是复制对象。PHP中可以使用clone操作符来复制对象。能力有限,如果大家发现本文有"bug",欢迎不吝赐教,同时如果大家有其他疑问或见解,欢迎一起分享交流。我们共同学习,共同交流,共同进步

目录
相关文章
|
8天前
|
JSON PHP 数据格式
PHP解析配置文件的常用方法
INI文件是最常见的配置文件格式之一。
|
11天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
12天前
|
PHP 开发者 容器
PHP命名空间深度解析与最佳实践####
本文深入探讨了PHP中命名空间(namespace)的机制、应用场景及最佳实践,旨在帮助开发者有效避免命名冲突,提升代码的组织性和可维护性。通过实例讲解,本文将引导您理解如何在实际项目中灵活运用命名空间,以及如何遵循业界公认的最佳实践来优化您的PHP代码结构。 ####
|
12天前
|
数据库连接 PHP 开发者
PHP中的异常处理深度解析####
【10月更文挑战第29天】 本文深入探讨了PHP中的异常处理机制,通过实例演示如何有效地捕获和处理运行时错误,提升代码的健壮性和可维护性。我们将从基础概念出发,逐步深入到自定义异常类的应用,以及如何在复杂项目中实施最佳实践。 --- ###
35 4
|
11天前
|
PHP 开发者
PHP 7新特性深度解析及其最佳实践
【10月更文挑战第31天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,再到错误处理机制的变革。我们将通过实际代码示例,展示如何高效利用这些新特性来编写更加健壮和高效的PHP应用。无论你是PHP新手还是资深开发者,这篇文章都将为你打开一扇窗,让你看到PHP 7的强大之处。
|
11天前
|
安全 编译器 PHP
PHP 8新特性解析与实践应用####
————探索PHP 8的创新功能及其在现代Web开发中的实际应用
|
22天前
|
PHP 数据安全/隐私保护 开发者
PHP 7新特性解析与实践
【10月更文挑战第20天】本文将深入浅出地介绍PHP 7的新特性,包括性能提升、语法改进等方面。我们将通过实际代码示例,展示如何利用这些新特性优化现有项目,提高开发效率。无论你是PHP新手还是资深开发者,都能从中获得启发和帮助。
|
24天前
|
PHP 开发者 UED
PHP中的异常处理深度解析####
本文深入探讨了PHP中的异常处理机制,旨在帮助开发者更好地理解和运用try-catch结构来提升代码的健壮性和可维护性。通过实例讲解与最佳实践分享,读者将学会如何有效地捕捉、处理并记录异常,从而避免程序因未预见的错误而崩溃,确保应用的稳定性和用户体验。 ####
|
10天前
|
前端开发 中间件 PHP
PHP框架深度解析:Laravel的魔力与实战应用####
【10月更文挑战第31天】 本文作为一篇技术深度好文,旨在揭开PHP领域璀璨明星——Laravel框架的神秘面纱。不同于常规摘要的概括性介绍,本文将直接以一段引人入胜的技术剖析开场,随后通过具体代码示例和实战案例,逐步引导读者领略Laravel在简化开发流程、提升代码质量及促进团队协作方面的卓越能力。无论你是PHP初学者渴望深入了解现代开发范式,还是经验丰富的开发者寻求优化项目架构的灵感,本文都将为你提供宝贵的见解与实践指导。 ####
|
30天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第12天】 在软件开发的世界中,设计模式是解决常见问题的最佳实践。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理运用设计模式可以极大地提高代码的可维护性、扩展性和复用性。本文将深入探讨策略模式(Strategy Pattern)的原理、实现方式及其在PHP中的应用。通过具体示例,我们将展示如何利用策略模式来解耦算法与对象,从而让代码更加灵活和易于管理。
19 0

推荐镜像

更多