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');
}