🪬

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

2021/05/13に公開

はじめに

__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() はよく使用するが、その他にも色々なメソッドが用意されていて、種類によって実行される状況が異なる。

参考

https://qiita.com/ichi_404/items/257b2c23aacef0b3cfdc#__setname-value
https://www.atmarkit.co.jp/ait/articles/1804/05/news008.html

Discussion