我想检查传递给函数的字符串是否会导致它的某个类或子类的实例.下面的例子可以解决问题,但我正在寻找一种不需要你实例化$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 举报,一经查实,本站将立刻删除。