[PHP] デストラクタについて教えて下さい
あるPHPの入門書にデストラクタについての解説があります。
*デストラクタ
「コンストラクタとは反対に、オブジェクトが破棄されるタイミングで実行されるのがデストラクタです。名前は __destructに固定されている。
デストラクタには、クラスの中で使用したリソースを破棄するなど、主に終了するときの処理を記述するのが一般的です。」
とあります。
以下のような記述をしました。(person.php)
<?php
class Person{
public $lastName;
public $firstName;
public function __construct($lastName, $firstName){
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function show(){
print "<p>私の名前は {$this->lastName} {$this->firstName}です。</p>";
}
public function __destruct(){
print "<p>インスタンスが破棄されました。<p>";
}
}
?>
上の記述をインスタンス化する記述です。(instancne.php)
<?php
require_once('person.php');
$p = new Person('田中', '幸太郎');
$p->show();
?>
<表示結果>
私の名前は 田中 幸太郎です。
インスタンスが破棄されました。
となります。試しにもうひとつインスタンスを追加します。
<?php
require_once('person.php');
$p = new Person('田中', '幸太郎');
$p->show();
$p1 = new Person('鈴木', '京子');
$p1->show();
?>
<表示結果>
私の名前は 田中 幸太郎です。
私の名前は 鈴木 京子です。
インスタンスが破棄されました。
インスタンスが破棄されました。
説明にある、
「オブジェクトが破棄されるタイミングで実行されるのがデストラクタです。」
「デストラクタには、クラスの中で使用したリソースを破棄するなど、主に終了するときの処理を記述するのが一般的です。」
これらの意味がわかりません。
コンストラクタの
「new 演算子によってインスタンス化されるタイミングで実行される」
「プロパティの初期化」
などの意味は理解できているつもりです。
デストラクタを使うと「オブジェクトが破棄される」、「クラスの中で使用したリソースを破棄する」と
ありますが、『一度インスタンスを作るとクラス内のリソースが破棄されるのかな?』と思い
ためしにもう一つインスタンスを作成しました。上記の通り問題なく使えています。
膨大な記述になると、クラス、この場合は 「class Person」」は再利用出来なくすると言った意味になるのでしょうか?
他の教材やネットで検索してみたりしたのですが、イメージがつかめません。
以下のPHP公式のサイトから考えてみると、クラス内で参照できるものがなければ、コールされるという風に解釈できるかもしれませんが、意味がわかりません。
デストラクタ(__destruct)はコンストラクタ(__construct)の反対というように記述されているものもありますが余計に意味が分かりません。
初学者にもわかるようにデストラクタについて教えてもらえないでしょうか?
またどういうケースで利用するのかもよく分かりません。
そのあたりも併せて教えて下さい。
宜しくお願いいたいます。
(参考)
デストラクタ
__destruct(): void
PHP には、C++ のような他のオブジェクト指向言語に似たデストラクタの概念があります。 デストラクタメソッドは、 特定のオブジェクトを参照するリファレンスがひとつもなくなったときにコールされます。 あるいは、スクリプトの終了時にも順不同でコールされます。
https://www.php.net/manual/ja/language.oop5.decon.php