您的位置 首页 知识分享

PHP 函数中引用传递的深浅拷贝问题

php 中引用传递默认是深拷贝,即创建原对象的副本,修改新对象不会影响原对象。浅拷贝只复制原对象的引用,修改新…

php 中引用传递默认是深拷贝,即创建原对象的副本,修改新对象不会影响原对象。浅拷贝只复制原对象的引用,修改新对象也会影响原对象。实战案例中,浅拷贝适用于同时修改多个对象,深拷贝适用于隔离对象避免相互影响。

PHP 函数中引用传递的深浅拷贝问题

PHP 函数中引用传递的深浅拷贝问题

简介

PHP 中的参数传递默认是按值传递,但可以通过引用传递将变量的地址传递给函数。引用传递可以提高代码效率,但需要注意引用传递的深浅拷贝问题。

立即学习“”;

深浅拷贝

  • 深拷贝:创建一个新对象,并将原对象的属性逐个复制到新对象中。修改新对象不会影响原对象。
  • 浅拷贝:创建一个新对象,但只复制原对象的引用,修改新对象也会影响原对象。

引用传递与深浅拷贝

在 PHP 中,函数中引用传递的实参默认是深拷贝,即创建原对象的副本。以下代码示例:

function func(&$arr) {   $arr[] = 10; }  $arr = [1, 2, 3]; func($arr); echo implode(', ', $arr); // 输出:1, 2, 3, 10
登录后复制

实战案例

浅拷贝的应用:在需要修改多个对象时,可以将它们都传递给一个引用传递的函数。例如,以下代码通过一个函数将多个数组都添加一个元素:

function addElement(&$arr1, &$arr2) {   $arr1[] = 10;   $arr2[] = 20; }  $arr1 = [1, 2, 3]; $arr2 = [4, 5, 6]; addElement($arr1, $arr2); echo implode(', ', $arr1); // 输出:1, 2, 3, 10 echo implode(', ', $arr2); // 输出:4, 5, 6, 20
登录后复制

深拷贝的应用:当需要隔离对象,避免修改一个对象同时影响其他对象时,可以使用深拷贝。例如,以下代码使用一个函数创建一个对象的副本:

function copyObject($obj) {   return clone $obj; }  $obj1 = new stdClass(); $obj1->name = 'John Doe'; $obj2 = copyObject($obj1); $obj2->name = 'Jane Doe'; echo $obj1->name; // 输出:John Doe echo $obj2->name; // 输出:Jane Doe
登录后复制

以上就是PHP 函数中引用传递的深浅拷贝问题的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/1279.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部