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下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
解析isset与is_null的区别
Aug 09 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
smarty内置函数section的用法
Jan 22 PHP
PHP封装的HttpClient类用法实例
Jun 17 PHP
如何实现php图片等比例缩放
Jul 28 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 PHP
PHP高并发和大流量解决方案整理
Dec 24 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
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
php错误级别的设置方法
2013/06/17 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
JavaScript 事件参考手册
2008/12/24 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
基于Python函数和变量名解析
2019/07/19 Python
python解释器spython使用及原理解析
2019/08/24 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
python制作朋友圈九宫格图片
2019/11/03 Python
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
《鲁班和橹板》教学反思
2014/04/27 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
机械机修工岗位职责
2014/08/03 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
python中redis包操作数据库的教程
2022/04/19 Python
volatile保证可见性及重排序方法
2022/08/05 Java/Android