我在PHP中有以下代码:
abstract class ProjectVars
{
/**
* Defines whether a user is logged in as ...
*/
const loggedInAs = [...];
[...]
}
我想访问字符串Defines whether a user is logged in as ...
。显然还有更多的常量,我想得到所有常量的字符串。这可能吗?有了反射类,我可以使用
$rc = new ReflectionClass('ProjectVars');
var_dump($rc->getDocComment());
以获得整个类的PHPDoc注释。我没有找到一个相应的方法来读取类常量的PHPDoc。有办法做到这一点吗?
是的,有:使用反射API,就像你已经知道的那样,但你可以通过创建一个输出所有注释的函数来进一步。然而,这种方法只是在有问题的类中创建一个静态方法,该方法将被静态调用。另一种方法是创建一个简单的助手类,该类只有一个采用Argument(类的名称)的静态方法。下面的代码演示了两种方法:
<?php
abstract class ProjectVars {
/**
* Defines whether a user is logged in as ...
*/
protected $loggedIn;
/**
* Determines whether the user is registered or not
* @var bool;
*/
protected $register;
/**
* Holds information about user's surfing/visit history
* @var string;
*/
protected $records;
public static function getClassComments(){
$refClass = new ReflectionClass(self::class);
$comments = array();
foreach ($refClass->getProperties() as &$refProperty) {
$comments[$refProperty->getName()] = trim(preg_replace("#(('/)?('*{1,2})('/)?)#si", "", $refProperty->getDocComment()));
}
return $comments;
}
}
var_dump(ProjectVars::getClassComments());
// PRODUCES:
array (size=3)
'loggedIn' => string 'Defines whether a user is logged in as ...' (length=42)
'register' => string 'Determines whether the user is registered or not
@var bool;' (length=63)
'records' => string 'Holds information about user's surfingvisit history
@var string;' (length=68)
因此,要访问属性的所有注释,例如:loggedIn
、register
或records
,您可能需要做的就是:
ProjectVars::getClassComments()['loggedIn'];
ProjectVars::getClassComments()['register'];
ProjectVars::getClassComments()['records'];
第二种方法:使用简单的HELPER类
<?php
class CommentAnalyser{
public static function getClassCommentsFor($fullyQualifiedClassName){
$refClass = new ReflectionClass($fullyQualifiedClassName);
$comments = array();
foreach ($refClass->getProperties() as &$refProperty) {
$comments[$refProperty->getName()] = trim(preg_replace("#(('/)?('*{1,2})('/)?)#si", "", $refProperty->getDocComment()));
}
return $comments;
}
}
var_dump(CommentAnalyser::getClassCommentsFor('ProjectVars'));
// PRODUCES:
array (size=3)
'loggedIn' => string 'Defines whether a user is logged in as ...' (length=42)
'register' => string 'Determines whether the user is registered or not
@var bool;' (length=63)
'records' => string 'Holds information about user's surfingvisit history
@var string;' (length=68)
实物模型在这里。
干杯,祝你好运。。。