PHP is_subclass_of函数的一个BUG和解决方法


Posted in PHP onJune 01, 2014

is_subclass_of的作用:

bool is_subclass_of ( object object, string class_name )

如果对象 object 所属类是类 class_name 的子类,则返回 TRUE,否则返回 FALSE。
注: 自 PHP 5.0.3 起也可以用一个字符串来指定 object 参数(类名)。

使用例子:

#判断$className是否是$type的子类
is_subclass_of($className,$type);

php5.3.7版本前针对interface会有一个bug

bug:https://bugs.php.net/bug.php?id=53727

interface MyInterface {}
class ParentClass implements MyInterface { }
class ChildClass extends ParentClass { }# true
is_subclass_of('ChildClass', 'MyInterface');
# false
is_subclass_of('ParentClass', 'MyInterface');

解决办法:

function isSubclassOf($className, $type){
    // 如果 $className 所属类是 $type 的子类,则返回 TRUE   
    if (is_subclass_of($className, $type)) {
        return true;
    }    // 如果php版本>=5.3.7 不存在interface bug 所以 $className 不是 $type 的子类
    if (version_compare(PHP_VERSION, '5.3.7', '>=')) {
        return false;
    }
    // 如果$type不是接口 也不会有bug 所以 $className 不是 $type 的子类
    if (!interface_exists($type)) {
        return false;
    }
    //  创建一个反射对象
    $r = new ReflectionClass($className); 
    //  通过反射对象判断该类是否属于$type接口
    return $r->implementsInterface($type);
}
PHP 相关文章推荐
SMARTY学习手记
Jan 04 PHP
PHP 多进程 解决难题
Jun 22 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
php自定义函数截取汉字长度
May 15 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
php校验表单检测字段是否为空的方法
Mar 20 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
统计PHP目录中的文件数方法
Mar 05 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
PHP中数组的分组排序实例
Jun 01 #PHP
php_screw安装使用教程(另一个PHP代码加密实现)
May 29 #PHP
PHP Curl出现403错误的解决办法
May 29 #PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
May 29 #PHP
神盾加密解密教程(一)PHP变量可用字符
May 28 #PHP
CI框架开发新浪微博登录接口源码完整版
May 28 #PHP
PHP+javascript制作带提示的验证码源码分享
May 28 #PHP
You might like
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
JS与C#编码解码
2013/12/03 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
2016/08/16 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
JS常用算法实现代码
2016/11/14 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
Python实现的石头剪子布代码分享
2014/08/22 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
python调用百度REST API实现语音识别
2018/08/30 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python学习笔记之装饰器
2020/08/06 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
出生医学证明书
2014/09/15 职场文书
导师工作推荐信
2015/03/27 职场文书
门球健将观后感
2015/06/16 职场文书
教师理论学习心得体会
2016/01/21 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL