PHPのマジックメソッド_callの使い方を現役エンジニアが解説【初心者向け】
初心者向けにPHPのマジックメソッド_callの使い方について現役エンジニアが解説しています。マジックメソッドとは、特定の操作が行われた場合に自動的に呼び出されるメソッドです。アクセス不能なメソッドにおいては_callが使用されます。
TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。
今回は、PHPのマジックメソッド_callの使い方について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
PHPについてそもそもよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まるでしょう。
なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

今回は、PHPに関する内容だね!

どういう内容でしょうか?

PHPのマジックメソッド_callの使い方について詳しく説明していくね!

お願いします!
PHPのマジックメソッドとは
マジックメソッドとは、特定の操作が行われた場合に自動的に呼び出される特殊なメソッドです。
基本的に直接呼び出さずに未定義のプロパティやメソッドにアクセスするなど、マジックメソッドは「 __construct()」、「__destruct()」のようにアンダースコア2つで始まります。
__callメソッドの使い方
マジックメソッドの一つ「__call()」メソッドは、アクセス不能なメソッドを実行しようとしたタイミングで呼び出されるものです。
アクセス不能というのは、下記のような形でメソッドが存在しないため、外部から実行できない状態となっています。
- private
- protected
__call()は、ユニットテストで使用するモックオブジェクト、スタブを作るときなどに便利です。
また、__call()を使って柔軟に外部からアクセスできるメソッドであるアクセサーを作ることも可能です。
[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中
実際に書いてみよう
ここでは、__call()の使用例を見ていきましょう。
__call()を使用せずにアクセス不能メソッドを実行した場合は、下記のようになります。
<?php class MagicMethod { } $obj = new MagicMethod(); $obj->func();
結果として、「Fatal error: Call to undefined method hoge::func()」というエラーが表示されるでしょう。
上記のソースに__call()を追記した場合どうなるかみてみましょう。
<?php class MagicMethod{ public function __call($name, $args) { echo "call {$name}\n"; var_dump($args); } } $obj = new MagicMethod(); $obj->func();
実行結果
call func array(0) { }
上記のソースを実行すると、func()はMagicMethodクラスに存在しないアクセス不能なメソッドであるため、__call()が呼び出され__call()内の処理が実行されるでしょう。
メソッド名「func」は、__call()の第一引数$nameに格納され、func()に引数を渡すと第二引数$argsに配列の要素として格納されます。
下記は、func()に引数を渡した例です。
<?php class MagicMethod{ public function __call($name, $args) { echo "call {$name}\n"; var_dump($args); } } $obj = new MagicMethod(); $obj->func(1, 2, 'abc', array(1,2,3));
実行結果
call func array(4) { [0]=> int(1) [1]=> int(2) [2]=> string(3) "abc" [3]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } }
執筆してくれたメンター
平野大輝(ひらのだいき)
スキル:PHP・Java・JavaScriptを用いて様々なアプリを開発するWebエンジニア。 |

PHPのマジックメソッド_callの使い方が分かりやすくて良かったです!

ゆかりちゃんも分からないことがあったら質問してね!

分かりました。ありがとうございます!
TechAcademyでは、初心者でも最短4週間で、PHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できる、オンラインブートキャンプを開催しています。
また、現役エンジニアから学べる無料体験も実施しているので、参加してみてください。