`
GavinHsueh
  • 浏览: 70922 次
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

 

举个简单例子:

 

 

<?php 
$a = 'hello world';
$b = $a;
$a = 'bey world';

var_dump($a);
var_dump($b);
?>

 

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



 

 

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

同样举个简单例子:

 

 

<?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;

 

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

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



 

 

 

$a = null;

 



 

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

 

 

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

 

 

小结

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

  • 大小: 5 KB
  • 大小: 7.5 KB
  • 大小: 10 KB
0
0
分享到:
评论

相关推荐

    小楼axure 图文教程(十四)页面传值-登录状态和用户名.rp

    小楼axure 图文教程(十四)页面传值-登录状态和用户名.rp

    双色图文详解 电感器及应用电路.

    双色图文详解 电感器及应用电路.双色图文详解 电感器及应用电路.双色图文详解 电感器及应用电路.

    word操作练习题图文混排

    在"word操作练习题图文混排01"的资源包中,你将找到一系列练习素材,包括文本、图片以及截图,这些都是帮助你提升这一技能的宝贵材料。 1. 图文框:在Word中,图文框是用于放置和格式化文字、图片或形状的工具。你...

    PMF在线源解析图文运行操作分解指南.pdf

    PMF模型的运行操作包括数据输入、基本设置、基本模型运行、运行结果的查看、误差评估和输出文件说明。模型的运行包括输入处理后的数据、设置模型参数、运行模型、评估模型运行结果,并最终通过旋转工具对结果进行...

    php图文识别OCR类

    `char.object.php`可能是用于处理识别到的单个字符或对象的类,可能包含解析OCR返回的坐标和识别结果的方法。这些信息对于后续的文本校正和格式化非常有用。 `config.php`文件则可能包含OCR引擎的配置参数,如API...

    Kafka技术内幕:图文详解Kafka源码设计与实现+书签.pdf+源码

    《Kafka技术内幕:图文详解Kafka源码设计与实现》是一本深入解析Apache Kafka的专著,旨在帮助读者理解Kafka的核心设计理念、内部机制以及源码实现。这本书结合图文并茂的方式,使得复杂的概念变得更为易懂。同时,...

    双色图文详解 电容器及应用电路

    双色图文详解 电容器及应用电路 双色图文详解 电容器及应用电路 双色图文详解 电容器及应用电路

    loadrunner 监测linux系统图文详解

    《LoadRunner监测Linux系统图文详解》 在IT性能测试领域,LoadRunner是一款广泛使用的性能测试工具,能够模拟大量用户并发执行任务,以检测系统在高负载下的表现。本篇文章将详细解析如何使用LoadRunner监测Linux...

    PHP 企业微信群机器人发图片或图文链接

    PHP 企业微信群机器人发图片或图文链接,内有PHP代码实现 PHP 企业微信群机器人发图片或图文链接,内有PHP代码实现 PHP 企业微信群机器人发图片或图文链接,内有PHP代码实现

    全新2023UI最新自助图文打印系统证件照云打印微信小程序源码 PHP后端 附教程.zip

    开发者需要了解PHP语法、面向对象编程、数据库操作(如MySQL)以及API接口设计。 4. **云打印技术**: 云打印是指通过互联网连接打印机,实现远程打印的一种技术。在这个系统中,云打印可能涉及到将用户上传的文件...

    Kafka技术内幕:图文详解Kafka源码设计与实现 PD

    Kafka技术内幕:图文详解Kafka源码设计与实现 PDF 下载 Kafka技术内幕:图文详解Kafka源码设计与实现 PDF 下载

    VC++编程高手图文详解.ra

    总之,《VC++编程高手图文详解》全面覆盖了VC++编程的各个方面,无论是基础概念还是高级技术,都能提供详尽的解释和实例。通过学习这本书,读者不仅可以熟练掌握VC++编程,还能培养解决问题和分析设计的能力,为成为...

    微信图文编辑器php源码带后台

    微信图文编辑器php源码带后台,mysql数据库,仿v5微信在线编辑器

    PHP开发微信公众号自动生成文章发图文消息

    PHP根据微信开放文档开发的几个DEMO实例,本人正在做一款自动生成文章,发图文消息给关注的用户,有公众号粉丝的朋友开发好自动赚流量推广

    气相色谱仪原理(图文详解).pdf

    在实际操作中,温度对分离效果有很大影响,因此色谱柱通常安装在精确控温的柱箱中。检测器的种类多样,但功能相同,即在载气流中识别和响应待分离组分。数据处理可以通过传统的带状图记录仪、数字积分仪或计算机数据...

    Win7封装过程图文详解

    Win7 封装过程图文详解 Win7 封装过程图文详解是指使用 Easy Sysprep v3 封装系统和 EasyDrv5.08 驱动工具智能安装驱动的过程。整个过程可以分为以下几个步骤: 1. 封装前的准备:下载官方原版 Win7 系统,刻成...

    CentOS7安装Oracle 11gR2 图文详解

    CentOS 7 安装 Oracle 11gR2 图文详解 本文将指导读者在 CentOS 7 操作系统上安装 Oracle 11gR2 数据库。本文涵盖了从环境准备到安装 Oracle 数据库的所有步骤。 一、环境准备 在安装 Oracle 数据库之前,需要...

    Liunx Minio 图文详解安装成服务启动

    Liunx Minio 图文详解安装成服务启动是指在 Linux 操作系统中安装和配置 Minio 对象存储服务器的过程。Minio 是一个基于分布式存储系统的对象存储解决方案,提供高性能、可扩展性强的存储服务。 知识点1:Minio ...

    图文详解定制安装ubuntu

    图文详解定制安装ubuntu

Global site tag (gtag.js) - Google Analytics