マジックメソッドとは
PHPには様々な特殊機能をもった関数をもとから持っています。
__で始まる関数名を特殊関数と呼び、あらかじめ取りおいているようです。
なので、特殊な機能を持たない関数を__で始まる名前にしないほうがいいみたいです。
また、全てのマジックメソッドはpublicで宣言しないといけないようです。
コンストラクタ(__construct())などもマジックメソッドです。
マジックメソッドの一覧
| メソッド | 引数 | 戻り値 | 内容 | 
|---|---|---|---|
| __construct() | 任意 | なし | インスタンス生成時 | 
| __destruct() | なし | なし | インスタンスを破棄するとき | 
| __call() | 任意 | 任意 | アクセス不能メソッドをオブジェクトのコンテキストで実行したとき | 
| __callStatic() | 任意 | 任意 | アクセス不能メソッドを静的コンテキストで実行したとき | 
| __get() | プロパティ名 | 任意 | アクセス不能(protected または private)または存在しないプロパティからデータを読み込むとき | 
| __set() | プロパティ名と値 | なし | アクセス不能(protected または private)または存在しないプロパティへデータを書き込むとき | 
| __isset() | プロパティ名 | true/false | isset() あるいは empty() をアクセス不能(protected または private)または存在しないプロパティに対して実行したとき | 
| __unset() | プロパティ名 | なし | unset() をアクセス不能(protected または private)または存在しないプロパティに対して実行したとき | 
| __sleep() | なし | 配列 | インスタンスに対してserialize()を実行したとき | 
| __wakeup() | なし | なし | インスタンスに対してunserialize()を実行したとき | 
| __toString() | なし | 文字列 | インスタンスを文字列に変換しなければならないとき | 
| __invoke() | 任意 | 任意 | スクリプトがオブジェクトを関数としてコールしようとした | 
| __set_state() | 配列 | インスタンス | インスタンスに対してvar_export()を実行しようとしたとき | 
| __clone() | なし | なし | cloneキーワードを使ってインスタンスのクローン生成を実行したとき | 
| __debugInfo() | なし | 配列 | インスタンスに対してvar_dump()を実行したとき | 
使い方(一部)
__construct()
インスタンス生成時に実行される
class hoge {
  private $name = "";
  
  public function __construct(string $name) {
    $this->name = $name;
  }
}
__call()
アクセス不能メソッドをオブジェクトのコンテキストで実行したとき
class hoge {  
  public function __call($name, $argments) {
    return $name($argments); //関数$nameに引数として$argmentsを渡して実行
  }
}