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提取数据库内容中的图片地址并循环输出
Mar 21 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
php命令行写shell实例详解
Jul 19 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 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
简单的页面缓冲技术
2006/10/09 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
BootStrap中
2016/12/10 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
python 简单的多线程链接实现代码
2016/08/28 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
如何解决安装python3.6.1失败
2020/07/01 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
婚纱店策划方案
2014/05/22 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
工作检讨书怎么写
2015/01/23 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL