【PHP8.x】ReflectionClass::getMethods()メソッドの使い方
getMethodsメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getMethodsメソッドは、PHPのリフレクションAPIの一部として、特定のクラスに定義されているすべてのメソッドの情報を取得するメソッドです。これは、プログラムの実行中にクラスの構造や振る舞いを動的に調べる「リフレクション」という高度な機能を提供するReflectionClassオブジェクトに属しています。
このメソッドを使用することで、クラスが持つ公開、保護、非公開のメソッドといった、あらゆるアクセスレベルのメソッドに関する詳細な情報を取得できます。戻り値はReflectionMethodオブジェクトの配列となっており、各ReflectionMethodオブジェクトからは、メソッド名、引数、アクセス修飾子(public/protected/private)、静的メソッドかどうか、などが取得可能です。
また、取得するメソッドの種類を、例えば公開メソッドのみ、あるいは静的メソッドのみといった形で絞り込むためのフィルター定数を引数として指定することもできます。
getMethodsメソッドは、フレームワークやライブラリの開発において、未知のクラスのメソッドを動的に呼び出したり、既存のコードを解析したりする際に非常に強力なツールとなります。システム開発において、実行時のクラスの挙動を深く理解し、柔軟な処理を実装するために活用されます。
構文(syntax)
1<?php 2class MyExampleClass { 3 public function methodA() {} 4 protected function methodB() {} 5 private function methodC() {} 6} 7 8$reflectionClass = new ReflectionClass(MyExampleClass::class); 9$methods = $reflectionClass->getMethods(); 10?>
引数(parameters)
?int $filter = null
- int $filter = null: 取得するメソッドをフィルタリングするための整数。デフォルトはnullで、すべてのパブリックメソッドを取得します。
戻り値(return)
array
ReflectionClass::getMethods()は、指定したクラスが持つ全ての公開メソッドを表すReflectionMethodオブジェクトの配列を返します。この配列には、親クラスから継承されたメソッドも含まれます。
サンプルコード
PHP ReflectionClass getMethodsでメソッドを取得する
1<?php 2 3/** 4 * リフレクションを使ってメソッド情報を取得するためのサンプルクラスです。 5 * 様々なアクセス修飾子を持つメソッドを含んでいます。 6 */ 7class MySampleClass 8{ 9 /** 10 * publicメソッドの例です。 11 */ 12 public function publicMethod(): string 13 { 14 return "This is a public method."; 15 } 16 17 /** 18 * protectedメソッドの例です。 19 */ 20 protected function protectedMethod(): string 21 { 22 return "This is a protected method."; 23 } 24 25 /** 26 * privateメソッドの例です。 27 */ 28 private function privateMethod(): string 29 { 30 return "This is a private method."; 31 } 32 33 /** 34 * staticメソッドの例です。 35 */ 36 public static function staticMethod(): string 37 { 38 return "This is a static method."; 39 } 40 41 /** 42 * コンストラクタもメソッドの一つとして扱われます。 43 */ 44 public function __construct() 45 { 46 // クラスの初期化処理 47 } 48} 49 50// ReflectionClass のインスタンスを作成し、MySampleClass の情報を取得します。 51$reflectionClass = new ReflectionClass(MySampleClass::class); 52 53echo "--- 全てのメソッド(フィルタなし)---" . PHP_EOL; 54// getMethods() を引数なしで呼び出すと、クラス内の全てのメソッドを取得します。 55$allMethods = $reflectionClass->getMethods(); 56foreach ($allMethods as $method) { 57 // 各ReflectionMethodオブジェクトからメソッド名を取得して表示します。 58 echo "- " . $method->getName() . PHP_EOL; 59} 60echo PHP_EOL; // 出力を見やすくするための改行 61 62echo "--- publicメソッドのみ ---" . PHP_EOL; 63// ReflectionMethod::IS_PUBLIC をフィルタとして指定すると、publicメソッドのみを取得します。 64$publicMethods = $reflectionClass->getMethods(ReflectionMethod::IS_PUBLIC); 65foreach ($publicMethods as $method) { 66 echo "- " . $method->getName() . PHP_EOL; 67} 68echo PHP_EOL; 69 70echo "--- protectedメソッドのみ ---" . PHP_EOL; 71// ReflectionMethod::IS_PROTECTED をフィルタとして指定すると、protectedメソッドのみを取得します。 72$protectedMethods = $reflectionClass->getMethods(ReflectionMethod::IS_PROTECTED); 73foreach ($protectedMethods as $method) { 74 echo "- " . $method->getName() . PHP_EOL; 75} 76echo PHP_EOL; 77 78echo "--- privateメソッドのみ ---" . PHP_EOL; 79// ReflectionMethod::IS_PRIVATE をフィルタとして指定すると、privateメソッドのみを取得します。 80$privateMethods = $reflectionClass->getMethods(ReflectionMethod::IS_PRIVATE); 81foreach ($privateMethods as $method) { 82 echo "- " . $method->getName() . PHP_EOL; 83} 84echo PHP_EOL; 85 86echo "--- staticメソッドのみ ---" . PHP_EOL; 87// ReflectionMethod::IS_STATIC をフィルタとして指定すると、staticメソッドのみを取得します。 88$staticMethods = $reflectionClass->getMethods(ReflectionMethod::IS_STATIC); 89foreach ($staticMethods as $method) { 90 echo "- " . $method->getName() . PHP_EOL; 91} 92 93?>
PHPのReflectionClass::getMethodsメソッドは、指定されたクラスが持つメソッドの情報を動的に取得するために使用されます。これにより、プログラムの実行中にクラスの内部構造、特にメソッドに関して調べることができます。
このメソッドは、オプションで$filterという整数型の引数を受け取ります。この引数に何も指定しないかnullを指定した場合、そのクラスが定義する全てのメソッドが取得されます。$filterには、ReflectionMethod::IS_PUBLIC、ReflectionMethod::IS_PROTECTED、ReflectionMethod::IS_PRIVATE、ReflectionMethod::IS_STATICといった定数を指定することで、publicメソッドのみ、protectedメソッドのみ、privateメソッドのみ、staticメソッドのみなど、特定の条件に合致するメソッドだけを抽出できます。
戻り値は配列で、各要素はReflectionMethodクラスのインスタンスです。ReflectionMethodオブジェクトからは、メソッド名をはじめとする詳細な情報を取得できます。
サンプルコードでは、まずMySampleClassという様々なアクセス修飾子や特性を持つメソッドを含むクラスを定義しています。次に、ReflectionClassのインスタンスを作成し、このクラスの情報をリフレクション機能を使って調べます。getMethods()を引数なしで呼び出して全てのメソッドの名前を表示した後、ReflectionMethod::IS_PUBLICなどのフィルタ定数を指定し、public、protected、private、staticそれぞれのメソッドのみを抽出し、その名前を表示しています。これにより、プログラム実行中にクラスのメソッド情報を柔軟に取得し、活用できる様子がわかります。
ReflectionClass::getMethods()は、引数なしで呼び出すと、public、protected、private、staticメソッドやコンストラクタを含む、クラス内の全てのメソッド情報を返します。特定のアクセス修飾子を持つメソッドのみを取得したい場合は、ReflectionMethod::IS_PUBLICなどの定数を引数に指定してください。複数の条件でフィルタリングしたい場合は、これらの定数を|(OR演算子)で連結して指定できます。戻り値はReflectionMethodオブジェクトの配列であり、メソッド名だけでなく、アクセス修飾子や引数といった詳細情報も取得可能です。リフレクション機能は、実行時にクラス構造を動的に解析する高度な用途に用いられ、フレームワークやライブラリ開発で特に活用されます。通常のアプリケーション開発では頻繁に利用する機能ではないため、コードの複雑化やパフォーマンスへの影響を避けるためにも、その必要性を十分に理解した上で慎重に活用してください。
PHP ReflectionClass::getMethods でクラスのメソッドを取得する
1<?php 2 3/** 4 * リフレクションの対象となるサンプルクラスを定義します。 5 * このクラスのメソッド情報を取得することを目的とします。 6 */ 7class MySampleClass 8{ 9 public string $publicProperty = 'Hello'; 10 11 /** 12 * 公開メソッドの例です。 13 */ 14 public function publicMethod(): void 15 { 16 echo "This is a public method.\n"; 17 } 18 19 /** 20 * 保護メソッドの例です。 21 */ 22 protected function protectedMethod(): void 23 { 24 echo "This is a protected method.\n"; 25 } 26 27 /** 28 * 非公開メソッドの例です。 29 */ 30 private function privateMethod(): void 31 { 32 echo "This is a private method.\n"; 33 } 34 35 /** 36 * 静的公開メソッドの例です。 37 */ 38 public static function staticPublicMethod(): void 39 { 40 echo "This is a static public method.\n"; 41 } 42} 43 44// ReflectionClass のインスタンスを作成し、MySampleClass のリフレクション情報を取得します。 45// これにより、クラスの構造(プロパティ、メソッドなど)を実行時に調べることができます。 46$reflector = new ReflectionClass(MySampleClass::class); 47 48echo "--- すべてのメソッド (フィルターなし) ---\n"; 49// getMethods() を引数なしで呼び出すと、すべてのアクセス修飾子(public, protected, private)のメソッドが取得されます。 50// 戻り値は ReflectionMethod オブジェクトの配列です。 51$allMethods = $reflector->getMethods(); 52 53foreach ($allMethods as $method) { 54 echo "- " . $method->getName() . "()\n"; 55} 56echo "\n"; 57 58echo "--- 公開メソッドのみ (ReflectionMethod::IS_PUBLIC を使用) ---\n"; 59// getMethods() に ReflectionMethod::IS_PUBLIC フィルターを適用すると、公開メソッドのみが取得されます。 60$publicMethods = $reflector->getMethods(ReflectionMethod::IS_PUBLIC); 61 62foreach ($publicMethods as $method) { 63 echo "- " . $method->getName() . "()\n"; 64} 65echo "\n"; 66 67echo "--- 保護メソッドのみ (ReflectionMethod::IS_PROTECTED を使用) ---\n"; 68// getMethods() に ReflectionMethod::IS_PROTECTED フィルターを適用すると、保護メソッドのみが取得されます。 69$protectedMethods = $reflector->getMethods(ReflectionMethod::IS_PROTECTED); 70 71foreach ($protectedMethods as $method) { 72 echo "- " . $method->getName() . "()\n"; 73} 74echo "\n"; 75 76echo "--- 非公開メソッドのみ (ReflectionMethod::IS_PRIVATE を使用) ---\n"; 77// getMethods() に ReflectionMethod::IS_PRIVATE フィルターを適用すると、非公開メソッドのみが取得されます。 78$privateMethods = $reflector->getMethods(ReflectionMethod::IS_PRIVATE); 79 80foreach ($privateMethods as $method) { 81 echo "- " . $method->getName() . "()\n"; 82} 83echo "\n"; 84 85echo "--- 静的メソッドのみ (ReflectionMethod::IS_STATIC を使用) ---\n"; 86// getMethods() に ReflectionMethod::IS_STATIC フィルターを適用すると、静的メソッドのみが取得されます。 87$staticMethods = $reflector->getMethods(ReflectionMethod::IS_STATIC); 88 89foreach ($staticMethods as $method) { 90 echo "- " . $method->getName() . "()\n"; 91} 92echo "\n"; 93 94// 複数のフィルターを組み合わせて使用することも可能です。 95echo "--- 公開かつ静的メソッドのみ (ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_STATIC を使用) ---\n"; 96$publicStaticMethods = $reflector->getMethods(ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_STATIC); 97 98foreach ($publicStaticMethods as $method) { 99 echo "- " . $method->getName() . "()\n"; 100} 101echo "\n";
PHPのReflectionClass::getMethodsメソッドは、あるクラスが持つメソッドの情報を取得するために使用されます。この機能は「リフレクション」と呼ばれ、プログラムの実行中にクラスの構造(メソッドやプロパティなど)を動的に調べることができます。
このメソッドを引数なしで呼び出すと、対象となるクラスが持つすべてのメソッド(公開、保護、非公開問わず)が取得され、それぞれのメソッドを表すReflectionMethodオブジェクトの配列として返されます。
オプションの引数$filterを使用すると、取得するメソッドの種類を絞り込むことができます。例えば、ReflectionMethod::IS_PUBLICを指定すれば公開メソッドのみ、ReflectionMethod::IS_PROTECTEDを指定すれば保護メソッドのみを取得できます。また、ReflectionMethod::IS_STATICを指定することで静的メソッドのみを抽出することも可能です。これらのフィルターは「|」(OR演算子)で組み合わせることもでき、公開かつ静的なメソッドといったより複雑な条件で絞り込むこともできます。
サンプルコードでは、MySampleClassというクラスに様々なアクセス修飾子と静的メソッドを定義し、ReflectionClassを使ってその情報を取得しています。getMethods()を様々なフィルターで呼び出すことで、すべてのメソッド、公開メソッド、保護メソッド、非公開メソッド、静的メソッド、そして公開かつ静的メソッドがどのように取得されるかを示しており、実行時にクラスのメソッド構成を柔軟に調査できることがわかります。
ReflectionClass::getMethods()は、クラスのメソッド情報を実行時に動的に取得する際に用います。引数なしでは、公開、保護、非公開すべてのメソッドがReflectionMethodオブジェクトの配列として返されます。特定のメソッドのみ取得したい場合は、ReflectionMethod::IS_PUBLICなどの定数を引数に指定し、フィルターをかけることが重要です。複数のフィルターを組み合わせるには|演算子を使用し、「公開かつ静的」といった条件で絞り込めます。この機能は、フレームワーク開発などでクラスの構造を解析する際に特に有用ですが、通常のビジネスロジックで多用するとコードが複雑になるため、必要最小限に留めるのが良いでしょう。