第2回設計勉強会に参加しました | Shin x blogを読んで初めてautoloadを知った。
ついでにマジックメソッドについてまとめてみる。
classのマジックメソッド
- __construct(), __destruct()
- classのコンストラクタとデストラクタ
- 参考:PHP: コンストラクタとデストラクタ - Manual
- __call(), __callStatic()
- classに未定義まはたアクセス不可(private等)の関数を呼ばれた場合に実行される
- インスタンス関数の場合__call、クラス関数の場合__callStaticが呼ばれる
- __callStaticはPHP5.3以降
- 参考:PHP: オーバーロード - Manual
- __get()
- classに未定義まはたアクセス不可の変数を取得しようとされた場合に実行される
- 参考:PHP: オーバーロード - Manual
- __set()
- classに未定義まはたアクセス不可の変数に値をセットされた場合に実行される
- 参考:PHP: オーバーロード - Manual
- __isset()
- classに未定義まはたアクセス不可の変数にisset()された場合に実行される
- PHP5.1以降
- 参考:PHP: オーバーロード - Manual
- __unset()
- classに未定義まはたアクセス不可の変数をunset()された場合に実行される
- PHP5.1以降
- 参考:PHP: オーバーロード - Manual
- __sleep()
- classのインスタンスがserialize()された場合に実行される
- 参考:PHP: マジックメソッド - Manual
- __wakeup()
- classのインスタンスがunserialize()された場合に実行される
- 参考:PHP: マジックメソッド - Manual
- __toString()
- classのインスタンスが文字列化された場合(ただし、PHP5.2より前では直接echoまたはprintされた場合のみ)に呼ばれる
- 参考:PHP: マジックメソッド - Manual
- __set_state()
- classのインスタンスがvar_export()された場合に実行されるようだが、よく分からない...
- これだけはstaticに宣言するようだ
- PHP5.1以降
- 参考:PHP: マジックメソッド - Manual、PHP 5.1から使えるマジックメソッド「__set_state()」メソッド - PHPプロ!ニュース
- __clone()
- classのインスタンスのクローンを作成された場合に呼ばれる
- PHP5.1以降
- 参考:PHP: オブジェクトのクローン作成 - Manual
グローバル関数なマジックメソッド
- __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
0 件のコメント:
コメントを投稿