在我编写的用于自动记录应用程序类的脚本中,以下函数获取传入的类的父级:
function getParents($class_name)
{
$class = new \ReflectionClass($class_name);
$parents = [];
while ($parent = $class->getParentClass()):
$parents[] = $parent->getName();
$class = $parent;
endwhile;
return implode(", ", $parents);
}
以前从未使用过ReflectionClass::getParentClass()
,上面的功能是使用PHP manual for this particular reflection class method中给出的示例创建的。
在我的应用中调用此函数时,没有一个类返回带有逗号分隔的父类字符串-它们没有父或只有一个父。在什么情况下,一个班有多个父母?提供一个代码示例来帮助说明这种现象将很有帮助。
答案 0 :(得分:4)
变量$parents
的名称具有误导性。 $ancestors
会更好,因为一个PHP类只能有一个父代,并且给出的代码是找到一个父代,一个祖父母,一个曾祖父母等。希望您的代码没有长链继承,所以您只看到零个或一个祖先。
答案 1 :(得分:4)
您的函数将返回类的完整祖先。例如:
class Animal {}
class Mammal extends Animal {}
class Feline extends Mammal {}
class Lion extends Feline {}
如果您在类getParents
上使用Lion
函数,则将得到完整的父树,最高为Animal
:
echo getParents(Lion::class);
// "Feline,Mammal,Animal"