有没有办法从静态关键字中获取派生类名? 我真正想做的是。
对派生类进行反思 检查它是否实现了指定的类
我有一个静态方法,Base Class称其名为Base::check()
我希望Base::check()
检查是否存在接口实现。
check()方法知道接口的名称。所以我不需要从外部世界告诉它。
但如果无法从静态关键字获取DerivedClassName,我需要将类名从外部世界传递给方法。这不是一个好的编码原则。
我能做的另一个选择是。我可以创建一个返回::instance()
的{{1}}静态方法,并且可以从返回中执行get_class。但这也调整了我的应用原则。
第一种方法真的可行吗?或者我需要选择这种替代方案? 或者你还有其他类型的替代品吗?
答案 0 :(得分:2)
我不确定我是否理解您要做的事情,尤其是“从静态关键字中获取派生类名称”的含义。查看以下功能,看看它们是否符合您的要求:
class_implements
- 返回给定类class_parents
- 返回给定类的父类is_a
- 检查对象是否属于此类,或将此类作为其父类之一is_subclass_of
- 检查对象是否将此类作为其父类之一instanceof
Type Operator 如果您要引用Late Static binding,请查看
get_called_class
- “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() );