在 PHP 中创建对象副本
PHP 以独特的方式处理对象引用。与流行的看法相反,对象是通过引用传递的,这意味着将对象分配给另一个变量不会创建副本。在赋值后修改原始对象时,这种行为变得很明显。
示例:
考虑以下 PHP 代码片段:
class A { public $b; } function set_b($obj) { $obj->b = "after"; } $a = new A(); $a->b = "before"; $c = $a; // This line creates a reference to $a, not a copy set_b($a); print $a->b; // Output: 'after' print $c->b; // Output: 'after'
在此例如,将 $a 分配给 $c 创建对 $a 的引用而不是副本。当 set_b() 函数修改 $a 对象时,更改会反映在 $a 和 $c 中。
解决方案:使用克隆
PHP 5 及更高版本提供克隆运算符来创建对象的真实副本。通过使用克隆,您可以按值传递对象,并确保对原始对象的修改不会影响副本。
$objectB = clone $objectA; // Creates a copy of $objectA
重要提示:
它值得一提的是,在 PHP 中只有对象是通过引用传递的。原始数据类型(例如整数、字符串和布尔值)始终按值传递。
以上是如何在 PHP 中创建对象的真实副本?的详细内容。更多信息请关注PHP中文网其他相关文章!