我在PHP中有一个类层次结构,在我定义了一个常量的一些父类中,让我们假设我的例子中为常量调用了TYPE
。
我希望能够为我的一个类可能已定义的TYPE
传递一个有效值,然后返回定义常量的最老的最大父类(我正在调用的内容)这个常数的“原始类”。)我写了下面的代码并且它有效,但感觉很重,我想知道是否有更好,更高效的方法来做到这一点?
<?php
class Foo {
const TYPE = 'idiom';
}
class Bar extends Foo {}
class Baz extends Bar {}
function get_type_origin_class( $class, $type ) {
$origin_class = false;
$ref = new ReflectionClass( $class );
while ( $ref && $type == $ref->getConstant( 'TYPE' ) ) {
$origin_class = $ref->getName();
$ref = $ref->getParentClass();
}
return $origin_class;
}
echo get_type_origin_class( 'Baz', 'idiom' ); // Echos: Foo
echo get_type_origin_class( 'Bar', 'idiom' ); // Echos: Foo
echo get_type_origin_class( 'Foo', 'idiom' ); // Echos: Foo