※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その11」を公開しました。 旅の最後は、「__get(), __set(), __call(), __callStatic()」で〆とさせていただければ、と思います。 まずは、__callと__callStaticから。 端的には、この2つのマジックメソッドは「存在しないメソッドが呼ばれた時に動きます」。 相変わらず、さくっとサンプルを書いてみましょう。 まずはごく当たり前の「動かない」サンプルを。 class hoge { } // $obj = new hoge(); $obj->foo(); 「Fatal error: Call to undefined method hoge::foo() 」って怒られましたそりゃそうですね。 では、ここにマジックメソッドを追加してみましょう。 class hoge { // public function __call($func, $args) { echo “call function name is {$func}\n”; } } // $obj = new hoge(); $obj->foo(); エラーは出ずに、__callが呼ばれて中の処理が動きました。 同じように、静的なコンテキストも見てみましょう。 class hoge { } // hoge::foo(); ここでのエラーから class hoge { // public static function __callStatic($func, $args) { echo “call static function name is {$func}\n”; } } // hoge::foo(); での挙動までが、一式確認できます。 ちなみに、混ぜてもちゃんと、予想通りの動きをしますのでご確認ください。 class hoge { // public function __call($func, $args) { echo “call function name is {$func}\n”; } public static function __callStatic($func, $args) { echo “call static function name is {$func}\n”; } } // hoge::foo(); // $obj = new hoge(); $obj->foo(); また「__callだけ宣言しておいて__callStatic宣言しなくても、 都合良く静的なメソッド呼び出しで__callを呼び出してくれる」かというとそんなことありません、 というあたりは、この辺のコードで確認をしてみてください。 この続きは以下をご覧くださいhttp://resocia.jp/column/2125/

人気記事トップ10

人気記事ランキングをもっと見る