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 相关文章推荐
PHP5+UTF8多文件上传类
Oct 17 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
Yii全局函数用法示例
Jan 22 PHP
php防止sql注入的方法详解
Feb 20 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP实现创建一个RPC服务操作示例
Feb 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
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
python八大排序算法速度实例对比
2017/12/06 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
python sys.argv[]用法实例详解
2018/05/25 Python
python 字符串和整数的转换方法
2018/06/25 Python
python设置值及NaN值处理方法
2018/07/03 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
基于python plotly交互式图表大全
2019/12/07 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
is_file和file_exists效率比较
2021/03/14 PHP
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
品牌宣传方案
2014/03/21 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
户外亲子活动总结
2015/05/08 职场文书
企业工会工作总结2015
2015/05/13 职场文书
学术会议开幕词
2016/03/03 职场文书