如何有多个父类?

时间:2019-01-01 15:29:09

标签: php

在我编写的用于自动记录应用程序类的脚本中,以下函数获取传入的类的父级:

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中给出的示例创建的。

在我的应用中调用此函数时,没有一个类返回带有逗号分隔的父类字符串-它们没有父或只有一个父。在什么情况下,一个班有多个父母?提供一个代码示例来帮助说明这种现象将很有帮助。

2 个答案:

答案 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"

https://3v4l.org/IXhQl