PHP析构函数未被调用

时间:2013-03-15 23:27:05

标签: php

我正在使用PHP 5.4.12

我有两个班级

<?php

class MySessionHandler implements SessionHandlerInterface {
//..
}

$handler = new MySessionHandler();
session_set_save_handler($handler,true);

?>

<?php
class MySession {
//..
function __destruct() {
     session_write_close();
     echo 'called';
    }
}

使用此代码,MySession的析构函数永远不会被调用。

<?php
require_once 'MySessionHandler.php';
include_once 'MySession.php';
$test = new MySession();

但是使用这段代码,“MySession”析构函数被称为ok

<?php
require_once 'MySessionHandler.php';
include_once 'MySession.php';

class Test {
    function __construct() {
        $test = new MySession();
    }
}
$obj = new Test();

我测试了session_set_save_handler($ handler,true / false)。 我需要调用MySession的析构函数,因为我遇到了session_write_close();我必须明确地调用它,否则会话永远不会被写入服务器。

有关此问题的任何解决方法吗?我已经将代码简化为它们的根,但是__destruct方法在应该的时候不会被调用。

2 个答案:

答案 0 :(得分:3)

不依赖于__destruct ... From the manual

  

当使用对象作为会话保存处理程序时,使用PHP注册shutdown函数非常重要,以避免PHP内部在关闭时内部销毁对象的方式产生意外的副作用,并可能阻止调用write和close。通常,您应该使用register_shutdown_function()函数注册'session_write_close'。

答案 1 :(得分:1)

在上面的例子中,您需要实例化对象:

$test = new MySession();
相关问题