Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果使用重定向,PHP5是否调用_destruct()?_Php_Destructor - Fatal编程技术网

如果使用重定向,PHP5是否调用_destruct()?

如果使用重定向,PHP5是否调用_destruct()?,php,destructor,Php,Destructor,如果我有以下设置,我发现PHP5没有调用_destruct()函数: class test { __destruct() { echo 'hehe'; exit; } } header('Location: http://test.com/'); exit; 课堂测试{ __自毁 { 呼应“呵呵”; 出口 } } 标题('位置:http://test.com/'); 出口 它从不调用析构函数调用: 对于您实例化的任何对象 在您发布的脚本部分中,您没有实例化任何对象——可能这就

如果我有以下设置,我发现PHP5没有调用_destruct()函数:

class test { __destruct() { echo 'hehe'; exit; } } header('Location: http://test.com/'); exit; 课堂测试{ __自毁 { 呼应“呵呵”; 出口 } } 标题('位置:http://test.com/'); 出口 它从不调用析构函数

调用:

  • 对于您实例化的任何对象
    • 在您发布的脚本部分中,您没有实例化任何对象——可能这就是没有调用析构函数的原因
  • 在PHP脚本的末尾
使用头重定向不会阻止调用析构函数


还要注意,在PHP脚本的末尾调用析构函数——但不会阻止重定向,因为已经生成了标题“redirect”

例如,使用此代码:

class Test {
    public function __destruct() {
        echo 'hehe';
        file_put_contents('/tmp/test-desctructor.txt', "glop\n");
        exit;
    }
}

$a = new Test();

header('Location: http://example.com/');
exit;
(注意,我更正了一些错误,并添加了该类的实际实例)

您将不会在输出上看到“
hehe
”,但您会发现文件
/tmp/test destructor.txt
已创建:

$ cat /tmp/test-desctructor.txt
glop
如果要获取输出上的“
hehe
”,则需要删除重定向


在生成头之后调用析构函数——从析构函数调用exit不会改变头已经生成的事实

哦,这里有一个注释(引用——在页面底部):

注意:在调用过程中调用析构函数 脚本关闭具有HTTP头 已经发送了

这就是为什么你看不到你的“
hehe
”字符串:析构函数被调用;你只是在屏幕上看不到;-)


这就是我在示例中使用文件的原因,顺便说一句;-)

感谢您捕获对象实例。我确实是在我的剧本里写的。你的解释很清楚,谢谢你!