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 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
php自动载入类用法实例分析
Jun 24 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
Yii框架分页实现方法详解
May 20 PHP
[原创]php正则删除html代码中class样式属性的方法
May 24 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 PHP
PHP7数组的底层实现示例
Aug 25 PHP
Yii框架连表查询操作示例
Sep 06 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中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python删除过期文件的方法
2015/05/29 Python
Python数组定义方法
2016/04/13 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Python列表切片常用操作实例解析
2020/03/10 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
购房协议书范本
2014/04/11 职场文书
安全生产责任书范本
2014/04/15 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
初中历史教学反思
2016/02/19 职场文书
医学会议开幕词
2016/03/03 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP
OpenFeign实现远程调用
2022/08/14 Java/Android