《PHP8上級試験対策》コンストラクタとデストラクタの挙動について

  • URLをコピーしました!

はじめに

PHPでは、クラスのインスタンス生成・破棄のタイミングで自動的に呼ばれる特殊メソッドとして、コンストラクタ __construct()デストラクタ __destruct() があります。

PHP8以降、特に手動で __construct() を呼ぶ挙動がバージョンによって異なるため、上級試験でもよく問われるポイントです。

キーワード: __construct / __destruct / コンストラクタ / デストラクタ / ライフサイクル

目次

サンプルコード(PHP8.0 実行例)

<?php
declare(strict_types=1);
error_reporting(-1);

class Hoge {
    public function __construct(){
        echo __METHOD__ , "\n";
    }
    public function __destruct(){
        echo __METHOD__ , "\n";
    }
}

// 1回目
echo "start\n";
$obj = new Hoge();   // __construct 自動呼び出し
echo "middle\n";
unset($obj);         // __destruct 呼び出し
echo "end\n";

// 2回目
echo "start 2\n";
$obj = new Hoge();   // __construct 自動呼び出し
echo "middle\n";
$obj->__construct(); // PHP8.0では手動呼び出しOK

出力例(PHP8.0)

start
Hoge::__construct
middle
Hoge::__destruct
end
start 2
Hoge::__construct
middle
Hoge::__construct
Hoge::__destruct

コンストラクタ (__construct)

  • インスタンス生成時に自動的に呼ばれる
  • 引数を受け取り、初期化処理などに利用

デストラクタ (__destruct)

  • インスタンス破棄時に自動的に呼ばれる
  • 後始末(ファイルクローズやリソース解放など)に利用

コンストラクタ・デストラクタのライフサイクル

   インスタンス生成                インスタンス破棄
+-----------------+           +------------------+
| $obj = new Hoge | --------> | unset($obj)      |
+-----------------+           +------------------+
         |                             |
         v                             v
   +---------------+             +----------------+
   | __construct() |             | __destruct()   |
   +---------------+             +----------------+
         |                             ^
         +---------- 使用中 ------------+

💡 ポイント:

  • __construct()インスタンス生成時に自動呼び出し
  • __destruct()破棄時に自動呼び出し
  • PHP8.0では手動で __construct() を呼ぶことも可能

PHPバージョンによる違い

バージョンによって挙動が異なります。

PHPバージョン$obj->__construct() の手動呼び出し
8.0〜8.1呼べる(普通のメソッドとして実行される)
8.2〜Fatal error になる(禁止)

まとめ

  • コンストラクタ・デストラクタは タイミング依存の自動呼び出し
  • PHP8.0〜8.1では手動呼び出しも可能、8.2以降では禁止
  • unset() またはスコープ終了で自動的にデストラクタが呼ばれる
  • 上級試験では「どのタイミングで何が呼ばれるか」を正確に理解しておく

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次