PHP静态::DerivedClassName
有没有办法从static关键字获取派生类名? 我真正想做的是 对派生类进行反射PHP静态::DerivedClassName,php,reflection,php-5.3,Php,Reflection,Php 5.3,有没有办法从static关键字获取派生类名? 我真正想做的是 对派生类进行反射 检查它是否实现了指定的类 我有一个静态方法,基类将其命名为Base::check() 我希望Base::check()将检查接口实现是否存在。 check()方法知道接口的名称,所以我不需要将它与外部世界区分开来 但是,如果无法从static关键字获取DerivedClassName,我需要从外部世界将类名传递给该方法。这不是一个好的编码原则 我能做的另一个选择是。我可以创建一个::instance()静态方法,该方
检查它是否实现了指定的类 我有一个静态方法,基类将其命名为
Base::check()
我希望Base::check()
将检查接口实现是否存在。
check()方法知道接口的名称,所以我不需要将它与外部世界区分开来
但是,如果无法从static关键字获取DerivedClassName,我需要从外部世界将类名传递给该方法。这不是一个好的编码原则
我能做的另一个选择是。我可以创建一个::instance()
静态方法,该方法返回this
,我可以从它的返回中执行get\u类。但这也是我的应用原则
那么第一种方法真的可行吗?或者我需要找一个这样的替代品?
或者你还有其他选择吗?我不确定我是否理解你想做什么,特别是你所说的“从静态关键字获取派生类名”是什么意思。查看以下函数,查看它们是否执行了您想要执行的操作:
- -返回由给定类实现的接口
- -返回给定类的父类
- -检查对象是否属于此类或是否将此类作为其父类之一
- -检查对象是否将此类作为其父类之一
- -“后期静态绑定”类名
我想你是想做这样的事情:
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() );
您随身携带
static
关键字,并且要求您获取类的名称。就是这样,谢谢。我不知道get_调用的_class()在静态环境中工作。