侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

PHP函数参数的值传递与引用传递

2025-12-11 / 0 评论 / 4 阅读

题目

PHP函数参数的值传递与引用传递

信息

  • 类型:问答
  • 难度:⭐

考点

函数参数传递机制,引用操作符(&)的使用,变量作用域

快速回答

在PHP中:

  • 默认采用值传递:函数内修改参数不影响外部变量
  • 使用&符号实现引用传递:函数内修改会影响外部变量
  • 示例:
    function modifyValue(&$param) { $param = 'changed'; }
## 解析

原理说明

PHP函数参数传递有两种机制:

  • 值传递(默认):创建参数的副本传入函数,函数内修改不影响原始变量
  • 引用传递:使用&符号传递变量内存地址,函数内修改直接影响原始变量

代码示例

// 值传递示例
function addPrefix($str) {
    $str = "PRE_".$str;
    return $str;
}

$original = "test";
echo addPrefix($original); // 输出: PRE_test
echo $original;           // 输出: test(未改变)

// 引用传递示例
function addPrefixRef(&$str) {
    $str = "PRE_".$str;
}

$original = "test";
addPrefixRef($original);
echo $original; // 输出: PRE_test(原始值被修改)

最佳实践

  • 优先使用值传递,避免意外的副作用
  • 仅在需要修改原始变量时使用引用传递(如操作大型数组)
  • 函数返回值应通过return语句而非引用参数

常见错误

  • 误以为值传递能修改外部变量:
    function failChange($x) { $x = 100; }
  • 在调用时错误使用&:
    addPrefixRef(&$var); // PHP5.4+已弃用
  • 对字面量使用引用:
    addPrefixRef("text"); // 致命错误

扩展知识

  • 内存优化:PHP写时复制(Copy-On-Write)机制在值传递时不会立即复制内存
  • 对象传递:PHP5+中对象默认通过引用句柄传递(表现类似引用)
  • 返回引用
    function &getReference() { return $var; }