php析构函数漏洞,php析构函数行为

这很容易测试.

class DestructTestDummy {

protected $name;

function __construct($name) {

echo "Constructing $name\n";

$this->name = $name;

}

function __destruct() {

echo "Destructing $this->name\n";

//exit;

}

}

echo "Start script\n";

register_shutdown_function(function() {

echo "Shutdown function\n";

//exit

});

$a = new DestructTestDummy("Mr. Unset");

$b = new DestructTestDummy("Terminator 1");

$c = new DestructTestDummy("Terminator 2");

echo "Before unset\n";

unset($a);

echo "After unset\n";

echo "Before func\n";

call_user_func(function() {

$c = new DestructTestDummy("Mrs. Scopee");

});

echo "After func\n";

$b->__destruct();

exit("Exiting\n");

在PHP 5.5.12中打印:

Start script

Constructing Mr. Unset

Constructing Terminator 1

Constructing Terminator 2

Before unset

Destructing Mr. Unset

After unset

Before func

Constructing Mrs. Scopee

Destructing Mrs. Scopee

After func

Destructing Terminator 1

Exiting

Shutdown function

Destructing Terminator 2

Destructing Terminator 1

因此,我们可以看到,当我们显式取消设置对象,超出范围时以及脚本结束时,将调用析构函数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值