PHP static :: DerivedClassName

时间:2010-10-06 16:22:44

标签: php reflection php-5.3

有没有办法从静态关键字中获取派生类名? 我真正想做的是。

对派生类进行反思 检查它是否实现了指定的类

我有一个静态方法,Base Class称其名为Base::check() 我希望Base::check()检查是否存在接口实现。 check()方法知道接口的名称。所以我不需要从外部世界告诉它。

但如果无法从静态关键字获取DerivedClassName,我需要将类名从外部世界传递给方法。这不是一个好的编码原则。

我能做的另一个选择是。我可以创建一个返回::instance()的{​​{1}}静态方法,并且可以从返回中执行get_class。但这也调整了我的应用原则。

第一种方法真的可行吗?或者我需要选择这种替代方案? 或者你还有其他类型的替代品吗?

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解您要做的事情,尤其是“从静态关键字中获取派生类名称”的含义。查看以下功能,看看它们是否符合您的要求:

如果您要引用Late Static binding,请查看


我想你正试图做这样的事情:

class Base
{
    public static function check()
    {
        return in_array('IFoo', class_implements(get_called_class(), FALSE));
        // or
        $instanceClassName = get_called_class();
        return new $instanceClassName instanceof IFoo;
        // or
        $reflector = new ReflectionClass(get_called_class());
        return $reflector->implementsInterface('IFoo');           
    }
}
interface IFoo {};
class Foo extends Base implements IFoo {}

var_dump( Foo::check() );