gpt4 book ai didi

未调用 PHP 析构函数

转载 作者:可可西里 更新时间:2023-10-31 23:06:55 25 4
gpt4 key购买 nike

我正在使用 PHP 5.4.12

我有两个类(class)

<?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”析构函数就可以调用了

<?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(); 有疑问我必须显式调用它,否则 session 永远不会写入服务器。

有什么解决方法吗?我已将代码简化到它们的根,但 __destruct 方法没有在应该调用的时候调用。

最佳答案

不要依赖__destruct... From the manual :

When using objects as session save handlers, it is important to register the shutdown function with PHP to avoid unexpected side-effects from the way PHP internally destroys objects on shutdown and may prevent the write and close from being called. Typically you should register 'session_write_close' using the register_shutdown_function() function.

关于未调用 PHP 析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com