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 相关文章推荐
PHP动态变静态原理
Nov 25 PHP
Smarty+QUICKFORM小小演示
Feb 25 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
php array_map array_multisort 高效处理多维数组排序
Jun 11 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
destoon调用discuz论坛中带图片帖子的实现方法
Aug 21 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
PHP数组函数知识汇总
May 12 PHP
Laravel下生成验证码的类
Nov 15 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 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
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
JScript的条件编译
2007/05/29 Javascript
JS 对象介绍
2010/01/20 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
Angularjs 基础入门
2014/12/26 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
法律专业个人实习自我鉴定
2013/09/23 职场文书
重阳节登山活动方案
2014/02/03 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
Golang生成Excel文档的方法步骤
2021/06/09 Golang
Python进程池与进程锁之语法学习
2022/04/11 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP