Open In App

What is the difference between is_a() function and instanceof in PHP?

Improve
Improve
Like Article
Like
Save
Share
Report

is_a() Function

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.

Syntax:

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:




<?php 
// PHP program to illustrate the  
// is_a() function 
    
// sample class 
class GeeksforGeeks { 
    var $store = 'Hello geeks!'
    
// create a new object 
$geek = new GeeksforGeeks(); 
    
// checks if $geek is an object 
// of class GeeksforGeeks 
if (is_a($geek, 'GeeksforGeeks')) { 
    echo "Yes"
    
?>


Output:

Yes

instanceof operator

The instanceof operator is used in PHP to find out if an object is an instantiated instance of a class.

Syntax:

$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:




<?php
// PHP program to illustrate instanceof
// operator
  
// sample class 
class GeeksforGeeks { 
    var $store = 'Hello geeks!'
  
// create a new object 
$geek = new GeeksforGeeks(); 
  
// Checks if $geek is an object of 
// class GeeksforGeeks 
if ($geek instanceof GeeksforGeeks) {
    echo "Yes";
}
  
?>


Output:

Yes

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.
    Example:

    // 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;    
    


Last Updated : 22 Nov, 2018
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads