第2回設計勉強会に参加しました | Shin x blogを読んで初めてautoloadを知った。
ついでにマジックメソッドについてまとめてみる。
classのマジックメソッド
- __construct(), __destruct()
- __call(), __callStatic()
- classに未定義まはたアクセス不可(private等)の関数を呼ばれた場合に実行される
- インスタンス関数の場合__call、クラス関数の場合__callStaticが呼ばれる
- __callStaticはPHP5.3以降
- 参考:PHP: オーバーロード - Manual
- __get()
- __set()
- __isset()
- __unset()
- __sleep()
- __wakeup()
- __toString()
- __set_state()
- __clone()
グローバル関数なマジックメソッド- __autoload()
- 未定義のclassが参照された場合に呼ばれる
- この関数の中でクラス名等に紐付いたファイルをインクルードさせれば、classを使う時にいちいちrequire/includeしなくてよくなる
- newでのインスタンス生成や静的メソッドの呼び出しの他、extendsや型宣言などによるclassの参照でも呼ばれる
- 参考:PHP: オブジェクトのオートローディング - Manual
今まで__construct, __destruct, __call, __get, __setくらいしか知らなかった。
__constructは別にすると、この中では__autoloadが特に便利。
また、__call, __get, __setはコーディングミス防止に役立つので生産性向上に寄与する。「重いので使うな」的なことが書かれていることが多いので、それなりに負荷のあるサイトでは使わないほうがよいのかも。(1ページ表示するのに__setを1000回使うサイトとか!)
参考:
PHP: マジックメソッド - Manual