Pan*_*ate 110 php destructor object destroy
据我所知(这很少),有两种方法,给出:
$var = new object()
Run Code Online (Sandbox Code Playgroud)
然后:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
Run Code Online (Sandbox Code Playgroud)
其他更好的方法?我在这里分裂头发吗?
Fra*_*kie 143
你在找unset().
但请注意,您无法显式销毁对象.
它将保留在那里,但是如果您取消设置对象并且您的脚本将PHP推送到内存限制,则不需要的对象将被垃圾收集.我会选择unset()(而不是将其设置为null),因为它似乎具有更好的性能(未经过测试,但记录在PHP官方手册的其中一条评论中).
也就是说,请记住PHP一旦提供页面就会一直销毁对象.所以这应该只需要很长的循环和/或密集的页面.
一个方便的帖子解释了几个对此的误解:
这包含了几个关于析构函数如何工作的误解.根据PHP5文档,显式调用它实际上不会破坏你的变量:
PHP 5引入了类似于其他面向对象语言的析构函数概念,例如C++.只要没有对特定对象的其他引用,或者在关闭序列期间以任何顺序,就会调用析构函数方法.
上面的帖子确实说明将变量设置为null在某些情况下可以起作用,只要没有其他东西指向分配的内存.
简短回答:两者都需要。
我觉得给出了正确的答案,但只是最低限度。是的,通常 unset() 最适合“速度”,但如果你想立即回收内存(以 CPU 为代价)应该使用 null。
像其他人提到的那样,设置为 null 并不意味着所有内容都被回收,您可以拥有共享内存(未克隆)对象,以防止对象被破坏。此外,就像其他人所说的那样,无论如何你都不能明确地“销毁”对象,所以你无论如何都不应该尝试这样做。
您需要弄清楚哪一个最适合您。您还可以将 __destruct() 用于将在未设置或为 null 时调用的对象,但应谨慎使用,并且像其他人所说的那样,永远不要直接调用!
看:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/