業務において__destruct()
周りの挙動を調査する過程で、実行タイミングがいまいちイメージしにくかったので備忘として記載してみました。
__destruct()とは
公式ドキュメントでは以下のように説明されていました。
デストラクタメソッドは、 特定のオブジェクトを参照するリファレンスがひとつもなくなったときにコールされます。
あるいは、スクリプトの終了時にも順不同でコールされます。
実際に動かしてみた
文章だけ見てもいまいちイメージがつかなかったので簡単なコードを書いてみました。
sample.phpに__construct()
、__destruct()
とpublicな変数を定義しました。
<?php
class Sample
{
function __construct()
{
echo "コンストラクトの実行" . PHP_EOL;
}
function __destruct()
{
echo "デストラクトの実行" . PHP_EOL;
}
public $value = "変数値の出力" . PHP_EOL;
}
action.phpでSampleクラスをインスタンス化させてます。
その後、$valueを出力させるように記載してみて動かしてみます。
<?php
require("./sample.php");
$sample = new Sample();
echo $sample->value;
実行結果を見てみます。
コンストラクトの実行
変数値の出力
デストラクトの実行
実行結果からわかるように、デストラクトが一番最後に実行されていることがわかります。
なんとなく$valueの出力処理前に、return
を入れたらどうなるのかなと思ったので検証してみました。
<?php
require("./sample.php");
$sample = new Sample();
echo "実行終了" . PHP_EOL;
return;
echo $sample->value;
実行結果から分かる通り、returnで$valueの出力処理自体は実行されてないですが、デストラクトの実行はされています。
コンストラクトの実行
実行終了
デストラクトの実行
まとめ
デストラクトの挙動はretunなどには影響されず処理が全て完了した後に実行されるとイメージができました。
ただ、あくまで簡単な検証なだけで詳細な挙動については公式ドキュメントをぜひ閲覧いただければと思います。