我试图检测一个被另一个扩展,但它就是不起作用。谁能指出我正确的方向?
class Main
{
}
class Sub extends Main
{
}
class Third
{
}
$check = class_extends('Sub', 'Main'); // should return true
$check = class_extends('Third', 'Main'); // should return false
那么这是否可能,如果是,如何?
您可能正在寻找is_subclass_of
。也适用于实例和字符串类名,假设您有这些类:
class B {}
class C extends B {}
class A {}
然后
var_dump(is_subclass_of('C', 'B')); // true, C is subclass of B
var_dump(is_subclass_of('C', 'A')); // false C is not subclass of A
或者,如果您喜欢瘦箭头(->
),您也可以使用反射:
$refC = new ReflectionClass('C');
var_dump($refC->isSubclassOf('B')); // true, C is subclass of B
var_dump($refC->isSubclassOf('A')); // false C is not subclass of A
是的,这是可能的。我想你在哪里找instanceof
.
$object = new Sub;
var_dump($object instanceof Main);
这将输出bool(true)
.
与示例 #3 比较 使用实例检查对象是否不是 php.net 上的类的实例:
<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
您可以通过实例化第一个参数来坚持使用所需的函数:
function class_extends($class, $superclass) {
if ((new $class) instanceof $superclass) {
return true;
}
return false;
}
class_extends('Sub', 'Main'); // boolean true