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 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
php 数组使用详解 推荐
Jun 02 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
初识laravel5
Mar 02 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
joomla数据库操作示例代码
Jan 06 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 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
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
浅谈Python的异常处理
2016/06/19 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
详解Python正则表达式re模块
2019/03/19 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
python函数的万能参数传参详解
2019/07/26 Python
python计算无向图节点度的实例代码
2019/11/22 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
python time()的实例用法
2020/11/03 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
html5启动原生APP总结
2020/07/03 HTML / CSS
北京天润融通.net面试题笔试题
2012/02/20 面试题
服装仓管员岗位职责
2014/06/17 职场文书
大学生交通专业求职信
2014/09/01 职场文书
教代会开幕词
2015/01/28 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js