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内存溢出问题的解决方法
Jun 25 PHP
php字符串截取函数用法分析
Nov 25 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
php实现读取和写入tab分割的文件
Jun 01 PHP
8个PHP数组面试题
Jun 23 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
一段实用的php验证码函数
May 19 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 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中$_SERVER的详细参数与说明
2008/07/29 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
node实现分片下载的示例代码
2018/10/17 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
Django组件content-type使用方法详解
2019/07/19 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
市场营销个人求职信范文
2014/02/02 职场文书
道路施工安全责任书
2014/07/24 职场文书
民政工作个人总结
2015/02/28 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
公开致歉信
2019/06/24 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python