php 7.1+ 类常量支持可见性修饰符,reflectionclass::getreflectionconstants() 返回 reflectionclassconstant 数组,可用 ispublic() 等方法判断可见性,getdoccomment() 获取并清洗注释,getvalue() 读取值(无视可见性),适用于文档生成。

PHP 7.1+ 中,类常量支持 public、protected、private 可见性,而 ReflectionClass 提供了完整能力来识别这些属性并提取 DocBlock 注释——关键在于组合使用 getReflectionConstants() 和 ReflectionClassConstant 实例方法。
获取带可见性的常量列表
ReflectionClass::getReflectionConstants() 返回全部常量的 ReflectionClassConstant 对象数组(PHP 8.0+ 支持 $filter 参数筛选)。每个对象自带访问控制判断方法:
-
$const->isPublic()、$const->isProtected()、$const->isPrivate()可直接返回布尔值 -
$const->getModifiers()返回整型修饰符,可与ReflectionClassConstant::IS_PUBLIC等常量做位运算比对 - 注意:PHP 8.0 前无
$filter,需手动遍历过滤;8.0+ 可传ReflectionClassConstant::IS_PRIVATE等组合值
提取常量的 DocBlock 注释
每个 ReflectionClassConstant 对象提供 getDocComment() 方法,返回原始注释字符串(含 /** ... */),需自行清洗:
- 返回值为
string|false,若无注释则返回false,务必先判空 - 典型清洗方式:
trim(str_replace(['/**', '*/', '*'], '', $comment)) - 不推荐用正则硬匹配,因注释中可能含星号或斜杠(如
/** @var int $x */)
安全访问私有/受保护常量的值与元信息
即使常量是 private 或 protected,反射仍可读取其名称、值、类型和注释:
-
$const->getValue()总能获取运行时值(不受可见性限制) -
$const->getName()和$const->getDeclaringClass()->getName()明确归属上下文 - 无需实例化类即可调用,
new ReflectionClassConstant('MyClass', 'SECRET')合法且高效
结合可见性与注释构建文档生成器片段
常见实用逻辑:按可见性分组输出,同时附带清洗后的注释说明:
- 遍历
getReflectionConstants()结果,用isPublic()等分类 - 对每组调用
getDocComment()并清洗,再与getName()、getValue()拼装结构化数据 - 示例字段结构:
['name' => 'API_TIMEOUT', 'value' => 30, 'visibility' => 'public', 'description' => 'HTTP 请求超时秒数']
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











