PHP中传值与引用的区别

在这里插入图片描述

在PHP中,变量的传递方式主要分为传值和传引用两种。这两种方式在操作中有一些重要的区别,影响着变量在函数调用或赋值操作中的表现。下面详细解释一下这两种传递方式的区别。

传值(By Value)

传值是指将变量的值复制一份传递给函数或赋值给另一个变量。

特点:

基本数据类型: 对于PHP的基本数据类型,例如整数、浮点数、字符串等,传递方式是传值。

新变量的独立副本: 当一个变量通过传值方式传递给函数或赋值给另一个变量时,会创建原变量的一个独立副本。在函数内部对该变量的修改不会影响原始变量的值。

函数内修改不影响外部: 在函数内部修改传递进来的变量不会影响到原始变量的值。

实例:

function addTen($num) {$num += 10;return $num;
}$value = 5;
$result = addTen($value);echo $value;   // 输出 5
echo $result;  // 输出 15

传引用(By Reference)

传引用是指将变量的引用传递给函数或赋值给另一个变量。

特点:

数组和对象: 对于PHP的复合数据类型,如数组和对象,可以通过传引用的方式进行传递。

引用指向同一存储地址: 当一个变量通过传引用方式传递给函数或赋值给另一个变量时,它们实际上引用的是相同的存储地址。这意味着对于这个变量的修改会影响到原始变量。

函数内修改影响外部: 在函数内部通过引用修改变量的值,会影响到原始变量。

实例:

function addTen(&$num) {$num += 10;return $num;
}$value = 5;
$result = addTen($value);echo $value;   // 输出 15
echo $result;  // 输出 15

区别:

性能: 传值的性能通常比传引用高,因为传引用涉及到更多的内存管理和引用追踪。传值是简单的值拷贝,而传引用则需要维护指向同一存储地址的多个变量。

变量的独立性: 传值方式保持了原始变量的独立性,不受函数内外的影响。而传引用方式允许在函数内修改原始变量,导致原始变量的值发生改变。

适用类型: 基本数据类型适合传值,而数组和对象等复合数据类型适合传引用。传引用在处理大型数据结构时可以避免额外的内存开销。

函数调用的结果: 传值的函数调用结果是函数内对参数的修改不会影响外部变量;而传引用的函数调用结果是函数内对参数的修改会影响外部变量。

在实际开发中,选择传值还是传引用通常取决于具体的需求。如果希望函数内对变量的修改不影响原始变量,使用传值;如果需要在函数内修改变量并影响原始变量,使用传引用。这两种方式各有优劣,根据具体场景选择适当的传递方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/141178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAtom OpenHarmony三方库创建发布及安全隐私检测

OpenAtom OpenHarmony三方库(以下简称“三方库”或“包”),是经过验证可在OpenHarmony系统上可重复使用的软件组件,可帮助开发者快速开发OpenHarmony应用。三方库根据其开发语言分为2种,一种是使用JavaScript和TypeScr…

分成互质组——DFS

给定 n 个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组? 输入格式 第一行是一个正整数 n。 第二行是 n 个不大于10000的正整数。 输出格式 一个正整数,即最少需要的组数。 数据范围 1≤n≤10 输入样例&am…

React【异步逻辑createAsyncThunk(一)、createAsyncThunk(二)、性能优化、createSelector】(十二)

文章目录 异步逻辑 createAsyncThunk(一) createAsyncThunk(二) 性能优化 createSelector 异步逻辑 //Product.js const onAdd () > {const name nameRef.current.value// 触发添加商品的事件dispatch(addProduct({name…

3D Gaussian Splatting:用于实时的辐射场渲染

Kerbl B, Kopanas G, Leimkhler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14. 3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper,法国团队在会议上展示了其实现的最…

线性代数(二)| 行列式性质 求值 特殊行列式 加边法 归纳法等多种方法

文章目录 1. 性质1.1 重要性质梳理1.1.1 转置和初等变换1.1.2加法行列式可拆分1.1.3 乘积行列式可拆分 1.2 行列式性质的应用1.2.1 简化运算1.2.2 将行列式转换为(二)中的特殊行列式 2 特殊行列式2.1 上三角或下三角行列式2.2 三叉行列式2.3 行列式行和&…

VueCli 自定义创建项目及配置

一、VueCli 自定义创建项目 1.安装脚手架 (已安装) npm i vue/cli -g2.创建项目 vue create hm-exp-mobile选项 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > Manually select features 选自定义手动…

生活污水处理一体化处理设备有哪些

生活污水处理一体化处理设备有多种类型,包括但不限于以下几种: 鼓风机:提供曝气系统所需的气流。潜水污水提升泵:将污水从低处提升到高处。旋转式滚筒筛分机:对污水中的悬浮物进行分离和筛选。回旋式格栅:…

100天精通风控建模(原理+Python实现)——第6天:风控建模中离散化是什么?

风控模型已在各大银行和公司都实际运用于业务,用于营销和风险控制等。    之前已经阐述了100天精通风控建模(原理+Python实现)——第1天:什么是风控建模?    100天精通风控建模(原理+Python实现)——第2天:风控建模有什么目的?    100天精通风控建模(原理+Python实现…

ARM Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程&#xf…

AE-水晶/玻璃相框的制作

目录 一、新建合成“蓝色相框” 二、新建蓝色水晶/玻璃相框 三、为蓝色相框添加效果

【计算机网络笔记】网络层服务模型——虚电路网络

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Arduino驱动A01NYUB防水超声波传感器(超声波传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、通信协议 4、驱动程序 A01NYUB超声波测距传感器是一款通过发射和接收机械波来感应物体距离的电子传感器。该款产品具有监测距离远、范围广、防水等优点,且具有一定的穿透能力(烟雾、粉尘等)。该产品带有可拆卸式喇叭口,安…

ubuntu(18.04)中安装open babel docker镜像并在php项目中调用容器中的obabel命令解析结果使用

使用软件: obabel镜像:informaticsmatters/obabel docker:http:// https://www.docker.com/ 安装docker #卸载旧版本sudo apt-get remove docker docker-engine docker-ce docker.io#更新索引包sudo apt-get update#安装 apt 依赖包&…

图的表示与基础--Java

1.图的基础知识 该图片来自于&#xff1a; https://b23.tv/KHCF2m6 2.稀疏图与稠密图 G(V,E)&#xff1a;V顶点个数&#xff0c;E边的个数 稀疏图&#xff1a;E<<V 一般用邻接表表示(数组链表) 稠密图&#xff1a;E接近V 一般用邻接矩阵表示&#xf…

为什么要有__init__.py这个文件?(一篇文章带你详细了解)

__init__.py 文件在Python中有着特殊的意义&#xff0c;尤其是在定义包&#xff08;package&#xff09;时。这个文件的存在有几个主要目的&#xff1a; 将目录标记为Python包&#xff1a;最重要的作用就是它告诉Python解释器&#xff0c;包含这个文件的目录应该被视作一个Pyth…

中断处理机制解析

要处理中断&#xff0c;需要有一个中断处理函数。定义如下&#xff1a; irqreturn_t (*irq_handler_t)(int irq, void * dev_id);/*** enum irqreturn* IRQ_NONE interrupt was not from this device or was not handled* IRQ_HANDLED interrupt was handled by this de…

Django路由层

路由层&#xff08;urls&#xff09; Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中&#xff0c;路由层负责处理用户的请求&#xff0c;然后将请求交给相应的视图函数进行处理&#xff0c;最后将处理结果返回给用户。 在Django中&#xff0c…

『Linux升级路』基础开发工具——vim篇

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、vim的基本概念 &#x1f4d2;1.1命令模式 &#x1f4d2;1.2插入模式 &…

【C++干货铺】剖析string | 底层实现

个人主页点击直达&#xff1a;小白不是程序媛 C专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 成员变量 成员函数 构造和拷贝构造 赋值重载 析构函数 operator[ ] size 迭代器 reserve&#xff08;扩容函数&#xff09; push_back(尾插函数&#xff09…

前端---认识HTML

文章目录 什么是HTML&#xff1f;HTML的读取、运行HTML的标签注释标签标题标签段落标签换行标签格式化标签图片标签a标签表格标签列表标签表单标签form标签input标签文本框单选框复选框普通按钮提交按钮文件选择框 select标签textarea标签特殊标签div标签span标签 什么是HTML&a…