【问题标题】:PHP Trying to Delete Reference of ObjectsPHP试图删除对象的引用
【发布时间】:2013-08-10 14:30:55
【问题描述】:
$root = new FileSystemNode("~", true);
$desktop = new FileSystemNode("Desktop", true);
$root->children[$desktop->name] = &$desktop;

...

$q = &$root->children["Desktop"];
unset($q);

我做这个奇怪的事情只是为了了解这段代码背后发生了什么。

真实场景:创建和连接对象后(在前 3 行中),我可能想将“桌面”分配给代码中某处的变量,然后我可能想删除它。但是,不幸的是,它根本没有被删除。我仍然可以访问 $root->children["Desktop"]。

有什么建议吗?

【问题讨论】:

    标签: php arrays reference pass-by-reference


    【解决方案1】:

    自 PHP 5 起,对象始终是引用。& 运算符对您的示例没有影响。


    更新:(因为您在 cmets 中的问题):

    如果您需要对象的独立副本,请使用clone

    $q = clone $root->children["Desktop"];
    

    【讨论】:

    • 我明白了。那么有没有办法通过使用'q'来打破'root'和'Desktop'之间的连接?我的意思是,不使用对象内部的任何变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2014-06-29
    相关资源
    最近更新 更多