2015-10-04 16 views
2

我想获取类层次结构顶部的子类的类的文件名,其中类层次结构的深度未知。获取类层次结构顶部的子类的文件名,无论继承的级别

I.e.我试图找出该怎么把代码中baseApplicationClass为了获得myApplicationClass的文件名,将在这两个例子中的工作:

baseApplicationClass 
L 
    abstract myApplicationClass extends baseApplicationClass 
    L 
     myInstanceClass extends myApplicationClass 

baseApplicationClass 
L 
    myApplicationClass extends baseApplicationClass 

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

在这两种情况下,我需要获取myApplicationClass的文件名。

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

随着两层次结构(即第二实施例),I可以明显做:

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

但失败了三个层级。

回答

1

我找到了一个解决方案:

# 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()); 

虽然也许有一些清洁剂!