获取类层次结构顶部的子节点的文件名,无论继承级别如何



我试图获得类的文件名,该类是层次结构顶部的子类,其中类层次结构的深度是未知的。

。我试图找出什么代码放入baseApplicationClass以获得myApplicationClass的文件名,这将在两个示例中工作:

baseApplicationClass
 L
   abstract myApplicationClass extends baseApplicationClass
    L
      myInstanceClass extends myApplicationClass

baseApplicationClass
 L
   myApplicationClass extends baseApplicationClass

使用get_class ($this)不起作用,因为这两个示例之间给出了不一致的结果。

在这两种情况下,我都需要得到myApplicationClass的文件名。

请注意,baseApplicationClass显然有一个已知的名称,而其他一个/两个类没有。

对于两个层次结构(即第二个例子),我显然可以这样做:

$reflector = new ReflectionClass (get_class ($this));
$applicationRoot = dirname ($reflector->getFileName ());

我找到了一个解决方案:

# Get the classes in order, starting with baseApplicationClass, but not including the last in the chain
$classHierarchy = array_reverse (array_values (class_parents ($this)));
# Add in the last in the chain
$classHierarchy[] = get_class ($this);
# Get myApplicationClass
$myApplicationClassName = $classHierarchy[1];   // Second in chain i.e. the direct child of baseApplicationClass
# Reflect as normal
$reflector = new ReflectionClass ($myApplicationClassName);
$this->applicationRoot = dirname ($reflector->getFileName ());

虽然也许有更干净的东西!

最新更新