当前位置: 首页 > 面试题库 >

如何在PHP中创建对象的副本?

丘飞
2023-03-14
问题内容

看来在PHP对象中是通过引用传递的。甚至赋值运算符似乎也没有创建对象的副本。

这是一个简单的人为证明:

<?php

class A {
    public $b;
}


function set_b($obj) { $obj->b = "after"; }

$a = new A();
$a->b = "before";
$c = $a; //i would especially expect this to create a copy.

set_b($a);

print $a->b; //i would expect this to show 'before'
print $c->b; //i would ESPECIALLY expect this to show 'before'

?>

在这两种印刷情况下,我都会得到“之后”的印象

那么,如何通过值而不是通过引用将 $ a 传递给 set_b()


问题答案:

在PHP 5+中,对象是通过引用传递的。在PHP 4中,它们是按值传递的(这就是为什么它具有运行时按引用传递(已弃用)的原因)。

您可以在PHP5中使用“克隆”运算符复制对象:

$objectB = clone $objectA;

而且,只是对象通过引用传递,而不是您在问题中所说的所有内容…



 类似资料:
  • 本文向大家介绍PHP 中如何创建嵌套 JSON 对象,包括了PHP 中如何创建嵌套 JSON 对象的使用技巧和注意事项,需要的朋友参考一下 JSON结构可以使用以下代码创建-

  • 我有一个数组,我需要用map函数循环,并像

  • 我是个初学者,我想知道以下几点。 假设我有一个类并创建了一个对象并将一些数据放入其中: 然后我想创建另一个对象,并使其具有与相同的内容(但不是相同的内存位置)。我能做到以下几点吗? 或者这只是将和设置为相同的内存地址,而我只是在内存中的单个对象上有效地获得了两个句柄? 我读过关于克隆物体的书,它看起来太复杂了。我觉得自从我在打算复制整个内容,而不仅仅指向第一个。是这样吗? 所以我的问题是:为什么不

  • 问题内容: 众所周知,使用JavaScript创建匿名对象很容易,就像下面的代码一样: 输出: 可以在PHP中应用相同的技术吗?我们可以在PHP中创建匿名对象吗? 问题答案: 已经有好几年了,但是我认为我需要保持最新信息! 从PHP 7开始,可以创建匿名类,因此您可以执行以下操作: 您可以在手册中详细了解 但是我不知道它的实现与JavaScript有多么相似,因此JavaScript和PHP中的匿

  • 问题内容: 我需要弄清楚如何创建一个临时日历对象(已经存在的“永久”日历的副本),以便可以操纵该副本:tempCal.add(单位,值)。我需要保持原始日历对象不变,所以我真的不想直接在其上调用add(unit,value)。 由于我创建副本的尝试均无济于事,因此,我目前的丑陋方法是调用永久性Cal.add(单位,值),显示所需的结果,然后调用永久性Cal.add(单位,-值),这似乎是,不酷。

  • 问题内容: 我不太使用php,并且在对象创建方面有些模糊。我需要发出一个发送json的网络服务请求,我想我已经覆盖了那部分。在提交数据之前,我需要创建一个嵌套对象。根据我对基于ecma的脚本语言的经验,我认为这是微不足道的,但是我发现该语法难以导航。我要创建的对象如下。 我已经看到了许多平面对象的示例,但是还没有找到嵌套对象的最小示例。上面对象的php语法是什么?这是在PHP中做的不寻常的事情吗?