マジックメソッドを巡る旅 その11

Human Resocia Co.,Ltd.

2015-10-23 09:00

ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その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を呼び出してくれる」かというとそんなことありません、
というあたりは、この辺のコードで確認をしてみてください。

この続きは以下をご覧ください
(リンク »)
本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。

【企業の皆様へ】企業情報を掲載・登録するには?

御社の企業情報・プレスリリース・イベント情報・製品情報などを登録するには、企業情報センターサービスへのお申し込みをいただく必要がございます。詳しくは以下のページをご覧ください。

ホワイトペーパー

新着

ランキング

  1. セキュリティ

    「デジタル・フォレンジック」から始まるセキュリティ災禍論--活用したいIT業界の防災マニュアル

  2. 運用管理

    「無線LANがつながらない」という問い合わせにAIで対応、トラブル解決の切り札とは

  3. 運用管理

    Oracle DatabaseのAzure移行時におけるポイント、移行前に確認しておきたい障害対策

  4. 運用管理

    Google Chrome ブラウザ がセキュリティを強化、ゼロトラスト移行で高まるブラウザの重要性

  5. ビジネスアプリケーション

    技術進化でさらに発展するデータサイエンス/アナリティクス、最新の6大トレンドを解説

ZDNET Japan クイックポール

自社にとって最大のセキュリティ脅威は何ですか

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]