PHP의 소멸자 __destruct 및 가비지 수집 메커니즘 분석

黄舟
풀어 주다: 2023-03-12 10:48:02
원래의
2386명이 탐색했습니다.

Destructor
객체가 가비지가 되거나 객체가 명시적으로 소멸될 때 실행됩니다.
PHP5에서 제공하는 소멸자는 destruct로 construction methodconstruct에 해당합니다.

Garbage Collection - GC(Garbage Collector)
PHP에서는 이 객체를 가리키는 변수가 없으면 객체는 가비지가 되어 PHP가 메모리에서 이를 파괴합니다.
이것은 PHP의 GC(가비지 수집기) 가비지 처리 메커니즘으로 메모리 오버플로를 방지할 수 있습니다.
PHP 스레드가 종료되면 현재 점유된 모든 메모리 공간이 소멸되고 현재 프로그램의 모든 객체도 소멸됩니다.

destruct() 소멸자는 가비지 객체가 재활용될 때 실행됩니다.
소멸자는 시스템에 의해 자동으로 호출되며 명시적으로 호출할 수도 있지만 이렇게 하지 마세요.

아래 프로그램과 같이 프로그램이 종료되기 전에 모든 객체가 소멸됩니다. 소멸자가 호출되었습니다.

<?php
class Person {
	public function destruct(){
		echo &#39;析构函数现在执行了 <br />&#39;;
		echo &#39;这里一般用来设置、关闭数据库、关闭文件等收尾工作&#39;;
	}}$p = new Person();for($i = 0; $i < 5; $i++){
	echo "$i <br />";}
	?>
로그인 후 복사

프로그램 실행 결과:

0 1 2 3 4 析构函数现在执行了 
这里一般用来设置、关闭数据库、关闭文件等收尾工作
로그인 후 복사

객체를 가리키지 않으면 객체가 소멸됩니다.

<?php
class Person {
	public function destruct(){
		echo &#39;析构函数现在执行了 <br />&#39;;
	}
}

$p = new Person();
$p = null; // 析构函数在这里执行了
$p = "abc"; // 一样的效果
for($i = 0; $i < 5; $i++){
	echo "$i <br />";
}
?>
로그인 후 복사

프로그램 실행 결과:

析构函数现在执行了 
0 
1 
2 
3 
4
로그인 후 복사
위의 예에서는 $p를 공백으로 설정하거나 $p에 string을 지정하여 $p가 가리키는 개체가 가비지 개체가 되도록 했습니다. PHP 쓰레기는 이 객체를 파괴합니다.

php unset 변수
<?php
class Person {
	public function destruct(){
		echo &#39;析构函数现在执行了 <br />&#39;;
	}
}

$p = new Person();
$p1 = $p;

unset($p);
echo &#39;现在把 $p 被销毁了,对象是否也被销毁了呢? <br />&#39;;

for($i = 0; $i < 5; $i++){
	echo "$i <br />";
}

echo &#39;现在再把 $p1 也销毁掉,即已经没有指向对象的变量了<br />&#39;;
unset($p1); // 现在没有指向对象的变量了,析构函数在这里执行了
?>
로그인 후 복사

프로그램 실행 결과:

现在把 $p 被销毁了,对象是否也被销毁了呢?
0 
1 
2 
3 
4 
现在再把 $p1 也销毁掉,即已经没有指向对象的变量了
析构函数现在执行了
로그인 후 복사

unset은 객체가 아닌 객체를 가리키는 변수를 파괴합니다.


위 내용은 PHP의 소멸자 __destruct 및 가비지 수집 메커니즘 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿