php static :: derivedClassName
-
28-09-2019 - |
题
有什么方法可以从静态关键字中获取派生的类名称?我实际想做的是。
反映派生的班级
检查Wheather,它是否实现指定的类
我有一种静态方法,基类说它的名字 Base::check()
我想 Base::check()
将检查接口实现的存在。 Check()方法知道接口的名称。因此,我不需要从外界讲述。
但是,如果无法从静态关键字中获取派生classname,我需要将类名传递给外部世界的方法。这不是一个好的编码原则。
我能做的另一个选择是。我可以做一个 ::instance()
返回的静态方法 this
我可以从返回中做一个get_class。但这也是我的申请原则。
那么第一个方法真的可以吗?还是我需要选择这种选择?还是您还有其他选择?
解决方案
我不确定我是否了解您要做什么,尤其是您的意思”从静态关键字获取派生的类名称“。查看以下功能,看看他们是否要做您想做的事:
class_implements
- 返回给定类实现的接口class_parents
- 返回给定类的父班is_a
- 检查该对象是否是此类的,还是将此课作为其父母之一is_subclass_of
- 检查该对象是否将此班级作为其父母之一instanceof
类型操作员
如果您指的是 晚期静态结合, , 看一下
get_called_class
- “晚期静态绑定”类名称
我想您正在尝试这样做:
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() );
不隶属于 StackOverflow