微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何检查字符串是否是特定类的子类的名称?

我想检查传递给函数的字符串是否会导致它的某个类或子类的实例.下面的例子可以解决问题,但我正在寻找一种不需要你实例化$className的解决方案 – 因为我实际上并不需要它.

public function register($className, $baseAttributes) {
    $instance = new $className;
    if (!($instance instanceof AbstractFoo)) {
        throw new invalidargumentexception();   
    }
    ...
}

我有另一种方法来计算$className的实例,但是如果在配置期间向方法提供了错误的类,我想尽早失败.例如:

public function register($className, $baseAttributes) {
    if (!($className classof AbstractFoo)) {
        throw new invalidargumentexception();   
    }
    ...
}

解决方法:

好吧,你需要Reflection,两个方法getParentClass()& isAbstract().

以下是您需要的实例.

public function register($className, $baseAttributes) {

     $classReflection = new ReflectionClass($className);
     $parentClassName = $classReflection->getParentClass()->getName();
     if($parentClassName=="AbstractFoo"){
          throw new invalidargumentexception();   
     }

     $parentReflection = new ReflectionClass($parentClassName);

     $isAbstract= $parentReflection->isAbstract(); // return true of false
     if (!($isAbstract)) {
          throw new invalidargumentexception();   
     }
     //....
}

其他解决方案使用ReflectionClass的isSubclassOf()方法

 public function register($className, $baseAttributes) {
     $classReflection = new ReflectionClass($className);
     if($classReflection->isSubclassOf("AbstractFoo")){
          throw new invalidargumentexception();   
     }
     //....
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐