gpt4 book ai didi

PHP Unset 充当引用

转载 作者:搜寻专家 更新时间:2023-10-31 20:42:22 27 4
gpt4 key购买 nike

我无法理解为什么即使我创建了副本,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 = 克隆 $node

这样做正确吗?为什么会这样?无论我将变量分配给什么,该变量都在引用内存中的相同项目?

最佳答案

您只有一个对象。要获得第二个对象,您必须创建一个克隆。从技术上讲,$singleNode = $node 正在复制仍然引用同一对象的对象句柄。

http://php.net/manual/en/language.oop5.cloning.phphttp://php.net/manual/en/language.oop5.references.php

关于PHP Unset 充当引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19253847/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com