《PHP8上級試験対策》ReflectionClassでクラスメソッドとアクセス修飾子を確認する

  • URLをコピーしました!

はじめに

PHPでクラスの情報を動的に取得したいときに便利なのが ReflectionClass です。特にクラスのメソッド一覧やアクセス修飾子を調べたい場合、getMethods()ReflectionMethod::isPrivate()/isProtected()/isPublic() を組み合わせると非常に便利です。
このページでは、具体的なサンプルコードとともに、メソッドの可視性を取得する方法をわかりやすく解説します。

キーワード: ReflectionClass / ReflectionMethod / getMethods / アクセス修飾子 / isPrivate / isProtected / isPublic

目次

基本の説明

1. ReflectionClass とは?

  1. 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  |
+-----------------------------+

ポイントまとめ

  1. ReflectionClass::getConstants() はメソッドではなく定数用。
  2. クラスのメソッド一覧は getMethods() で取得。
  3. アクセス修飾子の確認は ReflectionMethod::isPrivate()/isProtected()/isPublic() を使用。
  4. これらを組み合わせると、動的にメソッド情報を取得・分類できる。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次