0

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

反映派生类
检查它是否实现了指定的类

我有一个静态方法,基类说它的名字Base::check() 我想要Base::check()检查接口实现的存在。check() 方法知道接口的名称。所以我不需要从外部世界告诉它。

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

我可以做的另一个选择是。我可以创建一个::instance()返回的静态方法,this我可以从它的返回中做一个 get_class 。但这也影响了我的应用原则。

那么第一种方法真的可行吗?还是我需要寻找这种替代品?或者你有任何其他类型的替代品吗?

4

1 回答 1

2

我不确定我是否理解您要执行的操作,尤其是“从静态关键字获取派生类名称”的意思。查看以下函数,看看它们是否执行您想要执行的操作:

如果您指的是后期静态绑定,请查看


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

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() );
于 2010-10-06T16:31:31.317 回答