PHPのマジックメソッドとは?実行されるタイミングを理解する

PHPのマジックメソッドとは?実行されるタイミングを理解する PHP

はじめに

__construct() はよく使っていて、存在や用途は知っていたのですが、PHPのマジックメソッドって何?と聞かれた時に具体的に説明ができなかったので、さっくり調べて理解します。

具体的な用途ではなく、そもそもマジックメソッドとは?どんなのがあるの? ぐらいの内容です。

マジックメソッドとは?

マジックメソッドは、 ある動作がオブジェクトに対して行われた場合に、 PHP のデフォルトの動作を上書きする特別なメソッドです。

PHP: マジックメソッド – Manual

上記はPHPの公式マニュアルから引用したものですが、簡単に言うと「ある特殊な状況で実行されるメソッド」です。

詳しくは公式マニュアルで確認できますが、以下の表にざっくりとまとめる。

メソッド名実行タイミング
__construct()インスタンスが生成されるとき
__destruct()インスタンスが削除されるとき
__call()アクセス不能なメソッドを実行しようとしたとき
__callStatic()アクセス不能な静的メソッドを実行しようとしたとき
__get()アクセス不能(protectedまたはprivate)または存在しないプロパティからデータを読み込もうとしたとき
__set()アクセス不能(protectedまたはprivate)または存在しないプロパティへデータを書き込もうとしたとき
__isset()__isset()あるいはempty()をアクセス不能または存在しないプロパティに対して実行しようとしたとき
__unset()unset()をアクセス不能または存在しないプロパティに対して実行しようとしたとき
__sleep()インスタンスに対してserialize()を実行したとき
__wakeup()インスタンスに対してunserialize()を実行したとき
__toString()インスタンスを文字列に変換しなければならないとき
__invoke()インスタンスを関数のように実行しようとしたとき
__set_state()インスタンスに対してvar_export()を実行しようとしたときこのメソッドはstatic
__clone()cloneキーワードを使ってインスタンスのクローン生成を実行したとき
__debugInfo()インスタンスに対してvar_dump()を実行しようとしたとき
マジックメソッド一覧

__construct() のようにメソッド名は必ずアンダースコア2個(__)から始まります。

__ で始まる全てのメソッドはPHP によって予約されているため、自分で定義するメソッド名で使用することは非推奨となっています。

まとめ

マジックメソッドとは「ある特殊な状況で実行されるメソッド」で、__ から始まるメソッド名となっている。

__construct() はよく使用するが、その他にも色々なメソッドが用意されていて、種類によって実行される状況が異なる。

参考