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); }