What is the difference between is_a() function and instanceof in PHP?
The is_a() is a built-in function in PHP which is used to check whether a given object is of a given class or not. It also checks if the given class is one of the parents of the given object or not.
bool is_a( $object, $class_name, $allow_string )
Parameters: This function accepts three parameters as mentioned above and described below:
- object: This parameter is used to hold the tested object.
- class_name: This parameter is used to hold the class name.
- allow_string: If this parameter set to False, string class name as object is not allowed.
Return Value : This function returns True if the object is of this class or has this class as one of its parents else it will return a False value.
Below programs illustrate the is_a() function:
The instanceof operator is used in PHP to find out if an object is an instantiated instance of a class.
$a instanceof MyClass
Operands: This operator contains two operands which are listed below:
- $a: This is used as an object.
- MyClass: It is a class name.
Return Value: It returns True if the object is of this class or has this class as one of its parents else it will return a False value.
Below programs illustrate the instanceof operator in PHP:
Difference between is_a() function and instanceof operator:
- The is_a() is a function, whereas instanceof is a language construct. The is_a() function will be significantly slower since it has all the overhead of executing a function call.
- In case of callback in functions (like array_map) instanceof is not a function, it is a language construct, so it cannot use as callback. On the other hand callback can be used in is_a() function.
- The use of direct class name with instanceof is shorter than is_a() function.
// Short syntax (comparatively) $a instanceof MyClass is_a( $a, MyClass::class )
- The is_a() being a function takes an object as parameter one, and a string as parameter two, whereas instanceof takes an object as parameter one, and can take a class name, object instance, or class identifier (class name written without quotes) as parameter two.
Example of is_a():
// Only way to call it is_a( $object, $string );
Example of instanceof:
// Object instance $object instanceof $otherObject; // String class name $object instanceof $string; // Identifier for the class $object instanceof ClassName;