我无法理解为什么即使我创建了一个副本, PHP 也会为这两个children
对象取消设置我的属性。
当我分配$singleNode = $node
它时,不应该删除 singleNode 子节点,因为我没有传递引用,但它的行为方式是这样的。
谁能帮我解决这个问题?
您可以在 PHP CLI 中运行它以了解我的意思
<?php
$node = new stdClass();
$node->title = 'Test';
$node->children = [1,2,3,4,5];
// Does the node have children?
if (property_exists($node, 'children')) {
echo '$node has children' . PHP_EOL;
} else {
echo '$node NOT has children' . PHP_EOL;
}
// Assign node to a new variable, and remove children
$singleNode = $node;
if (property_exists($singleNode, 'children')) {
echo '$singleNode removed children' . PHP_EOL;
unset($singleNode->children);
}
// Does the node have children?
if (property_exists($node, 'children')) {
echo '$node has children' . PHP_EOL;
} else {
echo '$node NOT has children' . PHP_EOL;
}
我发现我可以这样做:
$singleNode = clone $node
这是正确的方法吗?为什么会这样?无论我将变量分配给什么,该变量都在引用内存中的同一项目?