Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP静态::DerivedClassName_Php_Reflection_Php 5.3 - Fatal编程技术网

PHP静态::DerivedClassName

PHP静态::DerivedClassName,php,reflection,php-5.3,Php,Reflection,Php 5.3,有没有办法从static关键字获取派生类名? 我真正想做的是 对派生类进行反射 检查它是否实现了指定的类 我有一个静态方法,基类将其命名为Base::check() 我希望Base::check()将检查接口实现是否存在。 check()方法知道接口的名称,所以我不需要将它与外部世界区分开来 但是,如果无法从static关键字获取DerivedClassName,我需要从外部世界将类名传递给该方法。这不是一个好的编码原则 我能做的另一个选择是。我可以创建一个::instance()静态方法,该方

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

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

我有一个静态方法,基类将其命名为
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()在静态环境中工作。