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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
PHP ignore_user_abort函数详细介绍和使用实例
Jul 15 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
php计算title标题相似比的方法
Jul 29 PHP
php输出图像的方法实例分析
Feb 16 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PHP生成加减算法方式的验证码实例
Mar 12 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
laravel使用数据库测试注意事项
Apr 10 PHP
PHP时间类完整代码实例
Feb 26 PHP
PHP7移除的扩展和SAPI
Mar 09 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
使用PHP强制下载PDF文件示例
2014/01/17 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
python 链接和操作 memcache方法
2017/03/04 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
python实现浪漫的烟花秀
2019/01/30 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
优秀工会工作者事迹材料
2014/06/02 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
导游词之安徽巢湖
2019/12/26 职场文书