ホームページ > バックエンド開発 > PHPチュートリアル > デストラクタとPHPのガベージコレクションの仕組みを詳しく解説_PHPチュートリアル

デストラクタとPHPのガベージコレクションの仕組みを詳しく解説_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:25:51
オリジナル
827 人が閲覧しました

Destructor: オブジェクトがガベージになったとき、またはオブジェクトが明示的に破棄されたときに実行されます。

GC(ガベージコレクター)

PHP では、このオブジェクトを指す変数がない場合、このオブジェクトはガベージになります。 PHP はメモリ内でそれを破壊します。

これは、メモリ オーバーフローを防ぐための PHP の GC (ガベージ コレクター) ガベージ処理メカニズムです。

PHP スレッドが終了すると、現在占有されているすべてのメモリ空間が破棄され、現在のプログラム内のすべてのオブジェクトも破棄されます。

__destruct() デストラクター

__destruct() デストラクターは、ガベージオブジェクトがリサイクルされるときに実行されます。

デストラクターを明示的に呼び出すこともできますが、そうしないでください。

デストラクタはシステムによって自動的に呼び出されます。プログラム内でオブジェクトの架空の関数を呼び出さないでください。

デストラクターはパラメーターを受け取ることができません。

以下のプログラムに示すように、プログラムが終了する前にすべてのオブジェクトが破棄されます。デストラクターが呼び出されました。

コードをコピーします コードは次のとおりです:

class Person {
public function __destruct(){
echo 'デストラクターが実行されました
';以前はセットアップ、データベースのクローズ、ファイルのクローズ、その他の仕上げ作業';
}
}

$p = new Person();
for($i = 0; $i echo "$ i
"
}

?>

プログラムの実行結果:
0
1
2
3
4
デストラクターが実行されます

これは通常、セットアップ、データベースのクローズ、ファイルのクローズなどの作業を終了するために使用されます。

オブジェクトが指されていない場合、オブジェクトは破棄されます。

コードをコピーします コードは次のとおりです:
class Person {
public function __destruct(){
echo 'デストラクターが実行されました
'
}
}

$p = new Person();
$p = null; // ここでデストラクタが実行されます
$p = "abc"; // 同じ効果
for($i = 0; $i echo "$i
"
}

?> プログラムの実行結果:

デストラクターが実行されます
0
1 2

3
4

上記の例の 10 行目では、11 行目で $p を空に設定するか、$p に文字列を割り当てています。これにより、$p は以前にオブジェクトを指していました。ゴミオブジェクトになります。 PHP ガベージはこのオブジェクトを破壊します。
php unset variable



コードをコピー

コードは次のとおりです:
class Person {
Public function __destruct(){
Echo 'デストラクターが実行されました
' ;
}
}

$p = new Person();

unset($p);
echo '$p が破棄されたので、オブジェクトも破棄されましたか?
';

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

echo '$ p1 を入れますも破棄されます。つまり、オブジェクトを指す変数がありません
'
unset($p1); // ここでデストラクターが実行されます? >


プログラムの実行結果:

$p が破壊されたので、オブジェクトも破壊されますか?
0
1
2
3
4

ここで $p1 を破棄します。つまり、オブジェクトを指す変数はもうありません

デストラクターが実行されます

unset は、オブジェクトではなく、オブジェクトを指す変数を破棄します。

http://www.bkjia.com/PHPjc/824907.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/824907.html技術記事デストラクター: オブジェクトがガベージになったとき、またはオブジェクトが明示的に破棄されたときに実行されます。 GC (ガベージ コレクター) PHP では、このオブジェクトを指す変数がない場合、このオブジェクトは次のようになります...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート