我试图获得类的文件名,该类是层次结构顶部的子类,其中类层次结构的深度是未知的。
。我试图找出什么代码放入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 ());
虽然也许有更干净的东西!