0

0

PHP变量在函数中如何传递_PHP函数传递变量方式【方式】

雪夜

雪夜

发布时间:2026-02-25 19:19:02

|

357人浏览过

|

来源于php中文网

原创

php函数参数默认按值传递,修改不影响外部变量;需改外部值时应在参数前加&声明引用,对象因存储标识符可直接修改属性但不可替换实例。

php变量在函数中如何传递_php函数传递变量方式【方式】

PHP函数里改不了变量值?默认是传值不是传引用

PHP函数参数默认按值传递,意味着函数内部修改变量,不会影响外部原始变量。这不是bug,是设计如此——除非你明确要改变外部变量,否则不该让函数“偷偷”改掉它。

常见错误现象:$name = "Alice"; changeName($name); echo $name; // 还是"Alice",而你期望输出"Bob"。

  • 使用场景:需要在函数内修改数组结构、对象状态,或批量处理后返回新值
  • 传值适合:计算、校验、生成结果等只读操作;安全、可预测
  • 传引用适合:避免大数组/字符串复制开销,或需原地修改(如解析配置、递归构建树)

想让函数改外面的变量?加&符号声明引用参数

在函数定义时,在参数前加&,表示该参数接受引用。调用时无需额外操作,PHP自动绑定。

示例:

function appendItem(&$arr, $item) {
    $arr[] = $item;
}
$myList = [1, 2];
appendItem($myList, 3);
// $myList 现在是 [1, 2, 3]

  • 注意:不能对字面量或表达式传引用,比如 appendItem([1,2], 3) 会报 Only variables can be passed by reference
  • 函数内部对$arrunset()reset()等操作,会影响外部变量
  • PHP 8.1+ 对&参数有更严格类型检查,若声明了类型(如array &$arr),传入非数组会报错

对象在PHP函数中天然“像引用”,但本质是传对象标识符

PHP 7+ 中,对象变量存储的是对象标识符(类似指针),函数内修改对象属性,外部可见;但若在函数内重新赋值整个变量(如$obj = new StdClass();),外部不受影响。

立即学习PHP免费学习笔记(深入)”;

示例:

function modifyObj($obj) {
    $obj->name = "changed"; // ✅ 外部可见
    $obj = new StdClass();    // ❌ 外部仍指向原对象
}

  • 不用加&也能改属性,这是对象行为,不是引用传递
  • 如果想在函数内彻底替换对象并让外部感知,必须用&$obj
  • 数组不是对象,array类型不享受此待遇——没加&就纯属复制

全局变量或global关键字?能不用就别用

global $var$GLOBALS['var']强行访问外部变量,看似绕过参数传递,实则破坏函数封装性,调试和测试都变困难。

  • 常见错误现象:函数行为依赖未声明的全局状态,迁移或复用时莫名失效
  • 性能上无优势,反而增加符号查找开销
  • 替代方案更清晰:把依赖显式作为参数传入,哪怕多传一个$config数组
  • 唯一较合理场景:极少数遗留系统中无法修改函数签名,且确认该变量确实全局唯一、稳定
函数参数是否传引用,不是“要不要省事”的问题,而是“要不要暴露副作用”的设计选择。很多人卡在“为什么改不了值”,其实该先问一句:这个修改,本该由谁负责?

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

310

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

286

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

167

2025.08.07

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

87

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

103

2025.09.18

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

638

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

218

2023.09.04

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

127

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.4万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号