PHP is_subclass_of函数的一个BUG和解决方法

2015-01-24信息快讯网

这篇文章主要介绍了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);
}

用 Composer构建自己的 PHP 框架之设计 MVC
用 Composer构建自己的 PHP 框架之构建路由
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
用 Composer构建自己的 PHP 框架之基础准备
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
thinkphp中html:list标签传递多个参数实例
Linux下安装PHP MSSQL扩展教程
PHP正则表达式 /i, /is, /s, /isU等介绍
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
php中__destruct与register_shutdown_function执行的先后顺序问题
PHP中使用Session配合Javascript实现文件上传进度条功能
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
自定义session存储机制避免会话保持问题
PHP JSON出错:Cannot use object of type stdClass as array解决方法
PHP的反射类ReflectionClass、ReflectionMethod使用实例
PHP错误Cannot use object of type stdClass as array in错误的解决办法
在PHP中使用X-SendFile头让文件下载更快
PHP中数组的分组排序实例
php_screw安装使用教程(另一个PHP代码加密实现)
PHP Curl出现403错误的解决办法
PHP的foreach中使用引用时需要注意的一个问题和解决方法
神盾加密解密教程(一)PHP变量可用字符
浅谈discuz密码加密的方式
ECMall支持SSL连接邮件服务器的配置方法详解
PHP小技巧之JS和CSS优化工具Minify的使用方法
php开启openssl的方法
PHP中spl_autoload_register()和__autoload()区别分析
PHP中把stdClass Object转array的几个方法
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
codeigniter框架The URI you submitted has disallowed characters错误解决方法
php中session过期时间设置及session回收机制介绍
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
从PHP的源码中深入了解stdClass类
理解PHP中的stdClass类
PHP反射类ReflectionClass和ReflectionObject的使用方法
php class类的用法详细总结
©2014-2024 dbsqp.com