当前位置:  开发笔记 > 编程语言 > 正文

Php Destructors

如何解决《PhpDestructors》经验,为你挑选了3个好方法。

当你必须在课堂上使用__destruct时,请给我一些真实的例子.



1> ircmaxell..:

好吧,因为我的上一个答案显然没有达到标准,让我再试一次.这个主题在互联网上有很多资源和例子.做一些搜索和浏览其他框架的代码,你会看到一些很好的例子......

不要忘记,仅仅因为PHP会在终止时关闭资源并不意味着当你不再需要它们时显然关闭它们(或者好不关闭它们)...这取决于用例(它是否一直被使用到最后,或者是否有一个早期的呼叫,然后不再需要其余的执行)...

现在,我们知道__destruct在对象被销毁时会调用它.从逻辑上讲,如果对象被销毁会发生什么?嗯,这意味着它已不再可用.因此,如果它有资源开放,那么关闭这些资源是否有意义,因为它被摧毁了?当然,在普通网页中,页面将很快终止,所以让PHP关闭它们通常并不可怕.但是,如果由于某种原因脚本长时间运行会发生什么?然后你有资源泄漏.那么,为什么不在不再需要它时关闭所有内容(或者考虑析构函数的范围,当它不再可用时)?

以下是现实世界框架中的一些示例:

    锂电锂\网\插座类

    Kohana的Memcached司机

    Joomla的FTP实现

    Zend Frameworks的SMTP邮件传输类

    CodeIgniter的TTemplate类

    一个整洁的蛋糕过滤器助手

    关于为Symfony会话类使用析构函数的Google-Groups线程

有趣的是Kohana跟踪标签,以便以后可以通过"命名空间"删除(而不是仅仅清除缓存).因此,它使用析构函数将这些更改刷新到硬盘存储.

CodeIgniter类也做了一些有趣的事情,它将调试输出添加到析构函数中的输出流.我不是说这很好,但它是另一种用途的例子......

每当我在主控制器上运行很长时间时,我个人都会使用析构函数.在构造函数中,我检查一个pid文件.如果该文件存在(并且其进程仍在运行),则抛出异常.如果没有,我创建一个包含当前进程ID的文件.然后,在析构函数中删除该文件.因此,除了释放资源之外,更多的是清理自己...



2> Jan Turoň..:

生成HTML页面还有另一个方便的用途

class HTMLgenerator {
  function __construct() {
    echo "";
  }
  function __destruct() {
    echo "";
  }
}

有了这门课,你就可以写了

$html = new HTMLgenerator();
echo "Hello, world!";

结果是

Hello, world!


我不认为这应该在现实世界中使用,看起来像一个黑客.依赖于非常具体的用法.我只是将HTMLgenerator实现为在其构造函数中使用一些HTML,并覆盖toString方法.调用者可以简单地说`echo new HTMLGenerator()`.如果你使用这个_destructor echo模式,你最好只在一个地方使用它,或者你将在地狱中试图弄清楚什么时候会输出.简而言之,这是对功能的滥用.
我同意.这只是一个想法,它可能会在一些聪明的头脑中引用一些精彩的想法,所以让这个exot活着:-)

3> VDVLeon..:

例如:



这是一个很好的使用destruct的原因.您可以始终阻止对会话源的读取和写入,并且仅在开始和结束时执行此操作.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有