irc*_*ell 43
好吧,因为我的上一个答案显然没有达到标准,让我再试一次.这个主题在互联网上有很多资源和例子.做一些搜索和浏览其他框架的代码,你会看到一些很好的例子......
不要忘记,仅仅因为PHP会在终止时关闭资源并不意味着当你不再需要它们时显然关闭它们(或者好不关闭它们)...这取决于用例(它是否一直被使用到最后,或者是否有一个早期的呼叫,然后不再需要其余的执行)...
现在,我们知道__destruct
在对象被销毁时会调用它.从逻辑上讲,如果对象被销毁会发生什么?嗯,这意味着它已不再可用.因此,如果它有资源开放,那么关闭这些资源是否有意义,因为它被摧毁了?当然,在普通网页中,页面将很快终止,所以让PHP关闭它们通常并不可怕.但是,如果由于某种原因脚本长时间运行会发生什么?然后你有资源泄漏.那么,为什么不在不再需要它时关闭所有内容(或者考虑析构函数的范围,当它不再可用时)?
以下是现实世界框架中的一些示例:
有趣的是Kohana跟踪标签,以便以后可以通过"命名空间"删除(而不是仅仅清除缓存).因此,它使用析构函数将这些更改刷新到硬盘存储.
CodeIgniter类也做了一些有趣的事情,它将调试输出添加到析构函数中的输出流.我不是说这很好,但它是另一种用途的例子......
每当我在主控制器上运行很长时间时,我个人都会使用析构函数.在构造函数中,我检查一个pid
文件.如果该文件存在(并且其进程仍在运行),则抛出异常.如果没有,我创建一个包含当前进程ID的文件.然后,在析构函数中删除该文件.因此,除了释放资源之外,更多的是清理自己...
Jan*_*roň 19
生成HTML页面还有另一个方便的用途
class HTMLgenerator {
function __construct() {
echo "<html><body>";
}
function __destruct() {
echo "</body></html>";
}
}
Run Code Online (Sandbox Code Playgroud)
有了这门课,你就可以写了
$html = new HTMLgenerator();
echo "Hello, world!";
Run Code Online (Sandbox Code Playgroud)
结果是
<html><body>Hello, world!</body></html>
Run Code Online (Sandbox Code Playgroud)
例如:
<?php
class Session
{
protected $data = array();
public function __construct()
{
// load session data from database or file
}
// get and set functions
public function __destruct()
{
// store session data in database or file
}
};
Run Code Online (Sandbox Code Playgroud)
这是一个很好的使用destruct的原因.您可以始终阻止对会话源的读取和写入,并且仅在开始和结束时执行此操作.