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 26 PHP
php 中英文语言转换类
Sep 07 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
Feb 19 PHP
joomla jce editor 解决上传中文名文件失败问题
Jun 09 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
利用php输出不同的心形图案
Apr 22 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
Jun 17 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
PHP filesize函数用法浅析
Feb 15 PHP
PHP使用QR Code生成二维码实例
Jul 07 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 文章采集正则代码
2009/12/28 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
vue实现跨域的方法分析
2019/05/21 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
教你使用python画一朵花送女朋友
2018/03/29 Python
python模拟表单提交登录图书馆
2018/04/27 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
python 使用shutil复制图片的例子
2019/12/13 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
python反扒机制的5种解决方法
2021/02/06 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
翻译专业应届生求职信
2013/11/23 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
庆六一活动总结
2014/08/29 职场文书
无犯罪记录证明
2014/09/19 职场文书
北京故宫导游词
2015/01/31 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
Java Spring Lifecycle的使用
2022/05/06 Java/Android