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

标签 php copy clone shallow-copy

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

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

<?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 - 如何在 PHP 中创建对象的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/185934/

相关文章:

file - 如何将* .csv复制到同一目录中的一个txt文件?使用PowerShell

linux - 远程到远程复制的 scp 主机 key 验证失败

GIT pull 或克隆存储库仅获取 Master 分支

php - 如何使用 php 或 Javascript 嵌入网页

php - Ajax响应错误

php - Android JSONParsing 错误 : E/Buffer Error﹕ Error converting result java. lang.NullPointerException: lock == null

eclipse - 如何通过 SVN 在 Subclipse 中复制文件或项目?

postgresql - 如何在 postgres 中克隆或复制同一个表中的记录?

Jquery克隆div问题

php - "Resource interpreted as Image but transferred with MIME type text/html"非常奇怪的问题