请给我一些你在类里面必须使用 __destruct 的真实例子。
最佳答案
好的,因为我上一个答案显然没有达到目标,让我再试一次。互联网上有很多关于这个主题的资源和示例。做一些搜索和浏览其他框架的代码,你会看到一些很好的例子......
不要忘记,仅仅因为 PHP 会在终止时为您关闭资源并不意味着当您不再需要它们时明确关闭它们是不好的(或者不关闭它们是好的)...这取决于用例(它是一直使用到最后,还是在早期有一个调用,然后在其余的执行过程中不再需要)...
现在,我们知道当对象被销毁时会调用 __destruct
。从逻辑上讲,如果对象被销毁会发生什么?嗯,这意味着它不再可用。因此,如果它有资源打开,那么在它们被销毁时关闭这些资源是否有意义?当然,在一般的网页中,页面很快就会终止,所以让 PHP 关闭它们通常并不可怕。但是,如果由于某种原因脚本长时间运行会发生什么?然后你有资源泄漏。那么,为什么不在不再需要时关闭所有内容(或者考虑到析构函数的范围,当它不再可用时)?
以下是现实世界框架中的一些示例:
- Lithium's lithium\net\Socket class
- Kohana's Memcached Driver
- Joomla's FTP Implementation
- Zend Frameworks's SMTP Mail Transport Class
- CodeIgniter's TTemplate Class
- A Tidy Filter Helper for Cake
- A Google-Groups Thread about using Destructors For the Symfony Session Class
有趣的是,Kohana 会跟踪标签,以便以后可以通过“命名空间”删除(而不是仅仅清除缓存)。因此它使用析构函数将这些更改刷新到硬存储中。
CodeIgniter 类还做了一些有趣的事情,它在析构函数的输出流中添加了调试输出。我并不是说这很好,但它是另一种用途的一个例子......
每当我的主 Controller 上有长时间运行的进程时,我都会使用析构函数。在构造函数中,我检查 pid
文件。如果该文件存在(并且它的进程仍在运行),我会抛出一个异常。如果没有,我创建一个具有当前进程 ID 的文件。然后,在析构函数中删除该文件。所以它更多的是清理自己,而不仅仅是释放资源......
关于PHP 析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566155/