如何在PHP中获取所有已加载类及其对应方法?
实现获取已声明类的所有方法(类名::方法名格式)
这事儿用PHP的反射机制就能完美解决,我给你整理了具体的实现方案和代码示例:
核心思路
- 先用
get_declared_classes()拿到所有已加载的类名列表 - 对每个类使用
ReflectionClass反射类,获取该类的所有方法 - 将类名和方法名拼接成
类名::方法名的格式,收集到结果数组中
完整代码示例
<?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
相关产品推荐
相关产品推荐

