PHP is_subclass_of函数的一个BUG和解决方法
is_subclass_of的作用:
boolis_subclass_of(objectobject,stringclass_name)
如果对象object所属类是类class_name的子类,则返回TRUE,否则返回FALSE。
注:自PHP5.0.3起也可以用一个字符串来指定object参数(类名)。
使用例子:
#判断$className是否是$type的子类 is_subclass_of($className,$type);
php5.3.7版本前针对interface会有一个bug
bug:https://bugs.php.net/bug.php?id=53727
interfaceMyInterface{}
classParentClassimplementsMyInterface{}
classChildClassextendsParentClass{}
#true
is_subclass_of('ChildClass','MyInterface');
#false
is_subclass_of('ParentClass','MyInterface');
解决办法:
functionisSubclassOf($className,$type){
//如果$className所属类是$type的子类,则返回TRUE
if(is_subclass_of($className,$type)){
returntrue;
}
//如果php版本>=5.3.7不存在interfacebug所以$className不是$type的子类
if(version_compare(PHP_VERSION,'5.3.7','>=')){
returnfalse;
}
//如果$type不是接口也不会有bug所以$className不是$type的子类
if(!interface_exists($type)){
returnfalse;
}
// 创建一个反射对象
$r=newReflectionClass($className);
// 通过反射对象判断该类是否属于$type接口
return$r->implementsInterface($type);
}热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下