Current Location: Home> Latest Articles> is_a() + interface_exists() Detect interface inheritance

is_a() + interface_exists() Detect interface inheritance

M66 2025-05-28

In PHP development, it is often encountered that you need to determine whether a class implements a certain interface. Although PHP provides multiple ways to achieve this requirement, combining is_a() and interface_exists() functions can make detection more accurate and safe. This article will introduce in detail the role of these two functions and their combined use methods.


1. Introduction to is_a() function

The is_a() function is used to determine whether an object is an instance of a certain class or interface. Its syntax is as follows:

 bool is_a(object|string $object_or_class, string $class_name, bool $allow_string = false)
  • $object_or_class : can be an object instance or class name (when the third parameter is true).

  • $class_name : The class or interface name to be detected.

  • $allow_string : Whether to allow the first parameter to be the string class name.

Example:

 class MyClass implements MyInterface {}

interface MyInterface {}

$obj = new MyClass();

var_dump(is_a($obj, 'MyInterface')); // bool(true)

is_a() can directly determine whether an object implements an interface, or it can also determine the inheritance relationship between a class and an interface.


2. Introduction to interface_exists() function

The interface_exists() function is used to determine whether an interface has been defined. The syntax is as follows:

 bool interface_exists(string $interface_name, bool $autoload = true)
  • $interface_name : Interface name.

  • $autoload : Whether to allow automatic loading of interfaces (default true).

Example:

 if (interface_exists('MyInterface')) {
    echo "The interface exists";
} else {
    echo "The interface does not exist";
}

This function checks whether the interface exists before calling is_a() , which can avoid errors caused by undefined interfaces.


3. Use is_a() and interface_exists() in combination to determine whether the class implements an interface

When using is_a() alone to judge, if the interface does not exist, it will lead to unexpected results. To avoid this situation, it is recommended to use interface_exists() to confirm whether the interface is defined, and then use is_a() to determine the realization relationship.

Sample code:

 $className = 'SomeClass';
$interfaceName = 'SomeInterface';

if (interface_exists($interfaceName)) {
    if (is_a($className, $interfaceName, true)) {
        echo "$className Implemented the interface $interfaceName";
    } else {
        echo "$className No interface is implemented $interfaceName";
    }
} else {
    echo "interface $interfaceName Does not exist";
}

The point here is:

  • interface_exists() ensures that the interface exists.

  • The third parameter is_a() is set to true , allowing the first parameter to be a class name string.

  • Combining these two functions avoids potential errors when the interface does not exist.


4. Practical application examples

Suppose we have the following interface and class:

 interface LoggerInterface {
    public function log($message);
}

class FileLogger implements LoggerInterface {
    public function log($message) {
        echo "Log to file: $message";
    }
}

We want to determine whether the class FileLogger implements LoggerInterface :

 $class = 'FileLogger';
$interface = 'LoggerInterface';

if (interface_exists($interface)) {
    if (is_a($class, $interface, true)) {
        echo "$class Implemented the interface $interface";
    } else {
        echo "$class No interface is implemented $interface";
    }
} else {
    echo "interface $interface Does not exist";
}

Output:

 FileLogger Implemented the interface LoggerInterface

5. Things to note

  • Make sure the interface name and class name are spelled correctly.

  • is_a() allows the class name string to be passed when the third parameter is true .

  • If only object instance is_a() is passed, the third parameter defaults to false .

  • Use interface_exists() to prevent errors caused by undefined interfaces.


By using is_a() and interface_exists() in combination, you can more securely and accurately determine whether a class implements the specified interface. This approach is suitable for dynamic type checking in large projects, ensuring the robustness of the code.