Destructor
는 객체가 가비지가 되거나 객체가 명시적으로 소멸될 때 실행됩니다.
PHP5에서 제공하는 소멸자는 destruct로 construction methodconstruct에 해당합니다.
Garbage Collection - GC(Garbage Collector)
PHP에서는 이 객체를 가리키는 변수가 없으면 객체는 가비지가 되어 PHP가 메모리에서 이를 파괴합니다.
이것은 PHP의 GC(가비지 수집기) 가비지 처리 메커니즘으로 메모리 오버플로를 방지할 수 있습니다.
PHP 스레드가 종료되면 현재 점유된 모든 메모리 공간이 소멸되고 현재 프로그램의 모든 객체도 소멸됩니다.
destruct() 소멸자는 가비지 객체가 재활용될 때 실행됩니다.
소멸자는 시스템에 의해 자동으로 호출되며 명시적으로 호출할 수도 있지만 이렇게 하지 마세요.
아래 프로그램과 같이 프로그램이 종료되기 전에 모든 객체가 소멸됩니다. 소멸자가 호출되었습니다.
<?php class Person { public function destruct(){ echo '析构函数现在执行了 <br />'; echo '这里一般用来设置、关闭数据库、关闭文件等收尾工作'; }}$p = new Person();for($i = 0; $i < 5; $i++){ echo "$i <br />";} ?>
프로그램 실행 결과:
0 1 2 3 4 析构函数现在执行了 这里一般用来设置、关闭数据库、关闭文件等收尾工作
객체를 가리키지 않으면 객체가 소멸됩니다.
<?php class Person { public function destruct(){ echo '析构函数现在执行了 <br />'; } } $p = new Person(); $p = null; // 析构函数在这里执行了 $p = "abc"; // 一样的效果 for($i = 0; $i < 5; $i++){ echo "$i <br />"; } ?>
프로그램 실행 결과: 析构函数现在执行了
0
1
2
3
4
php unset 변수 <?php
class Person {
public function destruct(){
echo '析构函数现在执行了 <br />';
}
}
$p = new Person();
$p1 = $p;
unset($p);
echo '现在把 $p 被销毁了,对象是否也被销毁了呢? <br />';
for($i = 0; $i < 5; $i++){
echo "$i <br />";
}
echo '现在再把 $p1 也销毁掉,即已经没有指向对象的变量了<br />';
unset($p1); // 现在没有指向对象的变量了,析构函数在这里执行了
?>
프로그램 실행 결과:
现在把 $p 被销毁了,对象是否也被销毁了呢? 0 1 2 3 4 现在再把 $p1 也销毁掉,即已经没有指向对象的变量了 析构函数现在执行了
unset은 객체가 아닌 객체를 가리키는 변수를 파괴합니다.
위 내용은 PHP의 소멸자 __destruct 및 가비지 수집 메커니즘 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!