PHP is_subclass_of函数的一个BUG和解决方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-01-31 18:28:02 浏览: 评论:0
这篇文章主要介绍了PHP is_subclass_of函数的一个BUG和解决方法,这个BUG存在于php5.3.7版本以前,并且针对interface方面,需要的朋友可以参考下。
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);
- }
Tags: is_subclass_of BUG
相关文章
- ·php debug_backtrace、debug_print_backtrace和匿名函数(2014-09-13)
- ·PHP中调试函数debug_backtrace的使用示例代码(2018-09-09)
- ·PHP自带函数库DEBUG如何使用?(代码示例)(2019-12-31)
- ·如何使用PHP错误处理函数debug_backtrace()?(2020-01-29)
- ·php中debug_backtrace、debug_print_backtrace和匿名函数用法实例(2021-05-01)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)