PHP is_subclassof関数の一つのバグと解決方法
1465 ワード
is_subclassofの役割:
使用例:
bug:https://bugs.php.net/bug.php?id=53727
bool is_subclass_of ( object object, string class_name )
対象がobjectに属するクラスならクラスクラスクラスクラスです。nameのサブクラスは、TRUEに戻り、そうでなければFALSEに戻ります。注:PHP 5.0.3からは一つの文字列でobjectパラメータ(クラス名)を指定することもできます。使用例:
# $className $type
is_subclass_of($className,$type);
php 5.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);
}