PHP 类和对象函数

PHP is_subclass_of() 函数用于检查给定的 对象实例或者类名 是否具有指定的类作为其父级之一或实现它。

语法

is_subclass_of(object_or_class, class, allow_string) 

参数

object_or_class必填。 指定类名或对象实例。如果类不存在,则不会生成错误。
class必需。 指定类名。
allow_string可选。 如果设置为 false,则不允许使用 object_or_class 形式的字符串类名称。如果类不存在,这也可以防止调用自动加载器。

返回值

如果对象object_or_class,则返回 true ,属于一个类,该类是类的子类,否则为 false。

示例:is_subclass_of() 示例

下面的示例显示了 is_subclass_of 的用法() 函数。

<?php
//定义一个类
class WidgetFactory {
  //代码
}

//定义一个子类
class WidgetFactory_Child extends WidgetFactory {
  //代码
}

//创建新对象
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();

if (is_subclass_of($WFC, 'WidgetFactory')) {
  echo "Yes, \$WFC is a subclass of WidgetFactory\n";
} else {
  echo "No, \$WFC is not a subclass of WidgetFactory\n";
}

if (is_subclass_of($WF, 'WidgetFactory')) {
  echo "Yes, \$WF is a subclass of WidgetFactory\n";
} else {
  echo "No, \$WF is not a subclass of WidgetFactory\n";
}

if (is_subclass_of('WidgetFactory_Child', 'WidgetFactory')) {
  echo "Yes, WidgetFactory_Child is a subclass of WidgetFactory\n";
} else {
  echo "No, WidgetFactory_Child is not a subclass of WidgetFactory\n";
}
?> 

上述代码的输出将是:

Yes, $WFC is a subclass of WidgetFactory
No, $WF is not a subclass of WidgetFactory
Yes, WidgetFactory_Child is a subclass of WidgetFactory 

示例:is_subclass_of() 使用接口示例

考虑下面的示例,其中此函数与接口一起使用。

<?php
//定义接口
interface MyInterface {
  public function MyFunction();
}

//定义接口的类实现
class MyClass implements MyInterface {
  public function MyFunction() {
    //代码
  }
}

//创建新对象
$myObj = new MyClass();

//使用类的对象实例进行检查
if (is_subclass_of($myObj, 'MyInterface')) {
  echo "Yes, \$myObj is a subclass of MyInterface\n";
} else {
  echo "No, \$myObj is not a subclass of MyInterface\n";
}

//使用类名字符串进行检查
if (is_subclass_of('MyClass', 'MyInterface')) {
  echo "Yes, MyClass is a subclass of MyInterface\n";
} else {
  echo "No, MyClass is not a subclass of MyInterface\n";
}
?> 

上述代码的输出将是:

Yes, $myObj is a subclass of MyInterface
Yes, MyClass is a subclass of MyInterface