【问题标题】:Deletion of a PHP object; also unset() and __destruct删除 PHP 对象;还有 unset() 和 __destruct
【发布时间】:2019-06-06 19:11:23
【问题描述】:

这些是否正确:

  1. 任何 PHP 对象在运行后总会被删除(就像它的代码一样)。

  2. unset($objectName) 只是刺激无论如何都会发生的事情。删除会快一点(从 RAM 内存中),但最终它是完全一样的。

  3. __destruct 就像在删除对象之前运行的事件,因此我们可以拥有或不拥有它。任何代码都可以在其中运行。

unset()__destruct 有关系吗?就像它会去那个(作为唯一的步骤)然后删除?

【问题讨论】:

    标签: php oop destructor magic-methods


    【解决方案1】:
    1. 当它们所在的脚本完成执行时,变量/对象/资源会自动删除/解除分配。没有必要(或不推荐)在所有事情上都调用unset()

    2. 如果您想在脚本结束之前删除/释放某些内容,您可以显式地unset() 它,它会立即发生,而不是脚本结束。这可以释放内存,但通常仅用于消除再次引用事物的可能性。

    3. 正确。

    unset() 和 __destruct 有什么关系吗?

    是的。就在对象被销毁之前(通过显式unset() 或通过到达脚本末尾),__destruct() 方法被调用(如果存在)。

    【讨论】:

    • 谢谢。为什么我们要“消除事物被再次引用的可能性”?
    • @AndyRogers 您可以在循环中这样做,以避免下一次迭代意外地保留上一次迭代的值。
    • @AndyRogers 也常用于从数组中删除项目。
    • 非常感谢您提供的所有信息。我仍在学习这个(就像到目前为止完成的 14-15 个月的 edu 一样)所以我会更好地“靠我自己”解决这个问题(比如学习 C 和阅读源代码)。当我们使用 unset() 时,这是否类似于将 __destruct 作为唯一步骤然后删除?我正在看一个视频,它说可能存在这样的关联。就像我们做 unset() 然后它去 __destruct,运行那里的任何东西并删除。所以是的,还是不是?差别不大,但我尽量不跳过我不明白的事情。
    • youtube.com/watch?v=xeKc5VGUkPM - 他谈到使用 unset() 触发 __destruct,这就是我们销毁对象的方式。这段视频让我对这一切感到困惑。
    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 2020-03-15
    • 2013-02-26
    • 2020-09-30
    • 2015-01-28
    • 1970-01-01
    • 2011-04-21
    • 2018-01-02
    相关资源
    最近更新 更多