PHP的析构函数的细节

来源:互联网 发布:360杀毒会拦截端口吗 编辑:程序博客网 时间:2024/05/05 17:58
    PHP手册里这样定义:     
void __destruct (void )

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

   但是程序异常时,是不执行__destruct()的,如果是数据库的连接的类,就可能造成数据库的连接不被释放,最终导致数据库的连接占满。

  可采用register_shutdown_function函数解决这个问题,测试例子: 

<?phperror_reporting(0);

class A{ function __construct() {  register_shutdown_function(array($this, '__destruct'));  echo "in."; }

 function test() {  $a = new FooClass();  }

 function __destruct() {  echo "out."; }   };

$test = new A;A.test();?>

但是也会产生另一个问题,就是__destruct会被执行两次。
原创粉丝点击