はじめに
PHPでクラスの情報を動的に取得したいときに便利なのが ReflectionClass です。特にクラスのメソッド一覧やアクセス修飾子を調べたい場合、getMethods()
と ReflectionMethod::isPrivate()/isProtected()/isPublic()
を組み合わせると非常に便利です。
このページでは、具体的なサンプルコードとともに、メソッドの可視性を取得する方法をわかりやすく解説します。
目次
基本の説明
1. ReflectionClass とは?
ReflectionClass
は、クラスの構造情報を動的に取得できるクラスです。
- 定数:
getConstants()
- プロパティ:
getProperties()
- メソッド:
getMethods()
← 今回はこちら
注意:
getConstants()
はクラス定数を取得するもので、メソッドではありません。
メソッドのアクセス修飾子を取得する
getMethods()
で取得したメソッドは ReflectionMethod
オブジェクトです。ReflectionMethod
には以下の便利メソッドがあります。
メソッド | 説明 |
---|---|
isPrivate() | private メソッドかを判定 |
isProtected() | protected メソッドかを判定 |
isPublic() | public メソッドかを判定 |
サンプルコード
<?php
declare(strict_types=1);
error_reporting(-1);
class Hoge {
public function pubFunc() {}
protected function proFunc() {}
private function priFunc() {}
}
$robj = new ReflectionClass(Hoge::class);
foreach ($robj->getMethods() as $method) {
if ($method->isPrivate()) {
echo 'private: ';
} elseif ($method->isProtected()) {
echo 'protected: ';
} elseif ($method->isPublic()) {
echo 'public: ';
}
var_dump($method->name);
}
図解イメージ(ASCIIアート)
+-----------------+
| class Hoge |
+-----------------+
| + pubFunc() | ← public
| # proFunc() | ← protected
| - priFunc() | ← private
+-----------------+
|
v
ReflectionClass::getMethods()
|
v
+-----------------------------+
| ReflectionMethod objects |
|-----------------------------|
| isPublic() -> true/false |
| isProtected()-> true/false |
| isPrivate() -> true/false |
+-----------------------------+
✅ ポイントまとめ
ReflectionClass::getConstants()
はメソッドではなく定数用。- クラスのメソッド一覧は
getMethods()
で取得。 - アクセス修飾子の確認は
ReflectionMethod::isPrivate()/isProtected()/isPublic()
を使用。 - これらを組み合わせると、動的にメソッド情報を取得・分類できる。