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 相关文章推荐
一个简单的自动发送邮件系统(三)
Oct 09 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
关于页面优化和伪静态
Oct 11 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
php使用get_class_methods()函数获取分类的方法
Jul 20 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 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动态生成VRML网页
2006/10/09 PHP
Yii快速入门经典教程
2015/12/28 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
Prototype框架详解
2015/11/25 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现倒计时的示例
2014/02/14 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
关于Python作用域自学总结
2019/06/10 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
python 实现视频 图像帧提取
2019/12/10 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
职工运动会邀请函
2014/02/02 职场文书
伦敦奥运会口号
2014/06/13 职场文书
法制教育演讲稿
2014/09/10 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers