ホームページ >バックエンド開発 >PHPチュートリアル >PHP のデストラクター __destruct とガベージ コレクション メカニズムの分析
Destructor
は、objectがガベージになった場合、またはオブジェクトが明示的に破棄された場合に実行されます。
PHP5で提供されているデストラクタはdestructであり、構築メソッドconstructに相当します。
ガベージ コレクション - GC (ガベージ コレクター)
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
上記の例では、$p を空に設定するか、$p に string を与えているため、$p が指すオブジェクトはガベージオブジェクトになります。 PHP はこのオブジェクトを破棄します。
php unset variable <?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 中国語 Web サイトの他の関連記事を参照してください。