You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中获取所有已加载类及其对应方法?

实现获取已声明类的所有方法(类名::方法名格式)

这事儿用PHP的反射机制就能完美解决,我给你整理了具体的实现方案和代码示例:

核心思路

  1. 先用get_declared_classes()拿到所有已加载的类名列表
  2. 对每个类使用ReflectionClass反射类,获取该类的所有方法
  3. 将类名和方法名拼接成类名::方法名的格式,收集到结果数组中

完整代码示例

<?php
// 获取所有已声明的类
$allClasses = get_declared_classes();

// 用于存储最终的类::方法格式数据
$classMethodList = [];

foreach ($allClasses as $className) {
    // 可选:如果你只想处理自己项目的类(比如以App\开头的),可以加个过滤
    // if (!str_starts_with($className, 'App\\')) {
    //     continue;
    // }

    try {
        // 初始化反射类,处理可能的异常(比如内部类无法反射的情况)
        $reflectionClass = new ReflectionClass($className);
        
        // 获取类的所有方法,这里默认包含所有修饰符的方法(公共、私有、保护)
        // 如果需要指定修饰符,比如只取公共方法:$reflectionClass->getMethods(ReflectionMethod::IS_PUBLIC)
        $methods = $reflectionClass->getMethods();

        foreach ($methods as $method) {
            // 拼接成你需要的格式
            $classMethodList[] = $className . '::' . $method->getName();
        }
    } catch (ReflectionException $e) {
        // 跳过无法反射的类
        continue;
    }
}

// 输出结果,格式和你示例一致
print_r($classMethodList);
?>

额外说明

  • 如果只想保留当前类自己声明的方法(排除继承来的方法),可以在遍历方法时加个判断:
    if ($method->getDeclaringClass()->getName() === $className) {
        $classMethodList[] = $className . '::' . $method->getName();
    }
    
  • 可以通过ReflectionMethod的常量来筛选特定修饰符的方法,常用的有:
    • ReflectionMethod::IS_PUBLIC:公共方法
    • ReflectionMethod::IS_PRIVATE:私有方法
    • ReflectionMethod::IS_PROTECTED:保护方法
      多个条件可以用|组合,比如ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED

内容的提问来源于stack exchange,提问作者kennedy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:15:14