is_subclass_of

Checks if the object has this class as one of its parents or implements it

&reftitle.description; `bool` `is_subclass_of` `mixed` `object_or_class` `string` `class` `bool` `allow_string`&true;

Checks if the given `object_or_class` has the class `class` as one of its parents or implements it.

&reftitle.parameters;

`object_or_class`

- A class name or an object instance. No error is generated if the class does not exist.

`class`

- The class name

`allow_string`

- If this parameter set to false, string class name as `object_or_class` is not allowed. This also prevents from calling autoloader if the class doesn't exist.

&reftitle.returnvalues;

This function returns &true; if the object `object_or_class`, belongs to a class which is a subclass of `class`, &false; otherwise.

&reftitle.examples;

### `is_subclass_of` example

    <?php
    // define a class
    class WidgetFactory
    {
      var $oink = 'moo';
    }

    // define a child class
    class WidgetFactory_Child extends WidgetFactory
    {
      var $oink = 'oink';
    }

    // create a new object
    $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";
    }
    ?>

&example.outputs;

    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` using interface example

    <?php
    // Define the Interface
    interface MyInterface
    {
      public function MyFunction();
    }

    // Define the class implementation of the interface
    class MyClass implements MyInterface
    {
      public function MyFunction()
      {
        return "MyClass Implements MyInterface!";
      }
    }

    // Instantiate the object
    $my_object = new MyClass;

    // Works since 5.3.7

    // Test using the object instance of the class
    if (is_subclass_of($my_object, 'MyInterface')) {
      echo "Yes, \$my_object is a subclass of MyInterface\n";
    } else {
      echo "No, \$my_object is not a subclass of MyInterface\n";
    }

    // Test using a string of the class name
    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";
    }
    ?>

&example.outputs;

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

&reftitle.notes; ¬e.uses-autoload;
&reftitle.seealso;

- `get_class`
- `get_parent_class`
- `is_a`
- `class_parents`