background image

php 中析构函数中的工作目录的问题

PHP 中的析构函数,相反于构造函数。PHP 调用它们来将一个对象从内存中销毁。默认地,
PHP 仅仅释放对象属性所占用的内存并销毁对象相关的资源。析构函数允许你在使用一个对
象之后执行任意代码来清除内存。

PHP 决定你的脚本不再与对象相关时。PHP 析构函数将被调用。在一个函数的命名空间内,

这会发生在函数

return 的时候。

对于全局变量

,这发生于脚本结束的时候。如果你想明确地销毁一个对象,你可以给指向该

对象的变量分配任何其它值。通常将变量赋值勤为

NULL 或者调用 unset。

记得很久之前听一个朋友说过,他的

__destruct 函数不被触发,非要在程序中 unset($obj)或

$obj = null;之后才被触发,虽然觉得很奇怪,但是并没有动手去检验一下,现在写个脚

本测试一下。
代码如下

:

<?php 
    class Test { 
        public function __construct(){ 
            $this->_log('start'); 
        } 
         
             
        public function __destruct () { 
            $this->_log('finish'); 
        } 
         
        public function _log ($str) { 
    <span style="white-space:pre">      </span>error_log($str . "\n", 3, './log.log'); 
        } 
    } 
    $test = new Test; 
?>
发现

log.log 中只有 start,没有 finish。

清空

log 中的内容之后,再修改一下程序:

unset($test); 
果然,有了

start,又有了 finish。

好像真的是要

unset 才会执行__destruct。

可是事情还没有结束,我又修改了一下程序,改动了

__destruct 函数,同时删除了 unset 这

句代码:

代码如下

:

<?php
    public function __destruct () { 
            echo 'finish'; 
            $this->_log('finish'); 
        }