PHP类实例化的对象未被显式销毁或该对象的引用未被全部删除时,先执行register_shutdown_function(),后执行__destruct()
示例一:
register_shutdown_function(function(){echo '页面加载完了'.'<br>';});
class GC {
public function __construct(){
echo __class__.'类被初始化了'.'<br>';
}
public function test(){
echo __function__.'方法被执行了'.'<br>';
}
public function __destruct()
{
echo __class__.'类被销毁了<br/>';
}
}
$GC = new GC;
$GC->test();
echo '其他操作'.'<br>';
执行结果为
GC类被初始化了
test方法被执行了
其他操作
页面加载完了
GC类被销毁了
示例二:
register_shutdown_function(function(){echo '页面加载完了'.'<br>';});
class GC {
public function __construct(){
echo __class__.'类被初始化了'.'<br>';
}
public function test(){
echo __function__.'方法被执行了'.'<br>';
}
public function __destruct()
{
echo __class__.'类被销毁了<br/>';
}
}
$GC1 = new GC;
$GC2 = new GC;
$GC1 = null;
echo '其他操作'.'<br>';
执行结果为
GC类被初始化了
GC类被初始化了
GC类被销毁了
其他操作
页面加载完了
GC类被销毁了
PHP类实例化的对象被显式销毁(类被赋值或null或被unset)或该对象所有的引用都被删除时,先执行register_shutdown_function(),后执行__destruct() 示例一:
register_shutdown_function(function(){echo '页面加载完了'.'<br>';});
class GC {
public function __construct(){
echo __class__.'类被初始化了'.'<br>';
}
public function test(){
echo __function__.'方法被执行了'.'<br>';
}
public function __destruct()
{
echo __class__.'类被销毁了<br/>';
}
}
$GC = new GC;
$GC->test();
$GC = null;
echo '其他操作'.'<br>';
执行结果为
GC类被初始化了
test方法被执行了
GC类被销毁了
其他操作
页面加载完了
示例二:
register_shutdown_function(function(){echo '页面加载完了'.'<br>';});
class GC {
public function __construct(){
echo __class__.'类被初始化了'.'<br>';
}
public function test(){
echo __function__.'方法被执行了'.'<br>';
}
public function __destruct()
{
echo __class__.'类被销毁了<br/>';
}
}
$GC1 = new GC;
$GC2 = new GC;
$GC1 = null;
$GC2 = null;
echo '其他操作'.'<br>';
执行结果为
GC类被初始化了
GC类被初始化了
GC类被销毁了
GC类被销毁了
其他操作
页面加载完了