php 怎么调用destruct,如果使用重定向,PHP5是否调用__destruct()?

destructor被称为:

>对于你已经实现的任何物体

>在你发布的脚本部分,你没有实例化任何对象 – 也许这是没有析构函数被调用的原因?

>在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-desctructor.txt已创建:

$cat /tmp/test-desctructor.txt

glop

如果要在输出上获得“hehe”,则需要删除重定向.

在生成标头之后调用析构函数 – 并且从析构函数调用exit将不会更改已生成该标头的事实.

哦,这是manual的一个注释(引用 – 在页面底部):

Note: Destructors called during the

script shutdown have HTTP headers

already sent.

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

这就是为什么我在我的例子中使用了一个文件,btw 😉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值