В чем разница между функцией is_a () и instanceof в PHP?

Опубликовано: 4 Февраля, 2022

is_a () Функция

Is_a () - это встроенная функция в PHP, которая используется для проверки того, принадлежит ли данный объект данному классу или нет. Он также проверяет, является ли данный класс одним из родителей данного объекта или нет.

Синтаксис:

 bool is_a ($ объект, $ имя_класса, $ allow_string)

Параметры: эта функция принимает три параметра, как указано выше и описано ниже:

  • объект: этот параметр используется для хранения тестируемого объекта.
  • class_name: этот параметр используется для хранения имени класса.
  • allow_string: если для этого параметра задано значение False, строковое имя класса в качестве объекта не допускается.

Возвращаемое значение: эта функция возвращает True, если объект принадлежит к этому классу или имеет этот класс в качестве одного из своих родителей, иначе она вернет значение False.

Ниже программы иллюстрируют функцию is_a ():

оператор instanceof

Оператор instanceof используется в PHP, чтобы узнать, является ли объект созданным экземпляром класса.

Синтаксис:

 $ a instanceof MyClass

Операнды: этот оператор содержит два операнда, которые перечислены ниже:

  • $ a: используется как объект.
  • MyClass: это имя класса.

Возвращаемое значение: он возвращает True, если объект принадлежит к этому классу или имеет этот класс в качестве одного из его родителей, иначе он вернет значение False.

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

Разница между функцией is_a () и оператором instanceof:

  • Is_a () - это функция, а instanceof - это языковая конструкция. Функция is_a () будет работать значительно медленнее, поскольку у нее есть все накладные расходы на выполнение вызова функции.
  • В случае обратного вызова в функциях (например, array_map) instanceof не является функцией, это языковая конструкция, поэтому его нельзя использовать в качестве обратного вызова. С другой стороны, обратный вызов может использоваться в функции is_a ().
  • Использование прямого имени класса с instanceof короче, чем функция is_a ().
    Пример:
    // Краткий синтаксис (сравнительно)
    $ a instanceof MyClass
    
    is_a ($ a, MyClass :: класс)
    
  • Is_a (), являющаяся функцией, принимает объект как параметр один, а строку как параметр два, тогда как instanceof принимает объект как параметр один и может принимать имя класса, экземпляр объекта или идентификатор класса (имя класса записывается без кавычек) как параметр два.

    Пример is_a ():

    // Единственный способ назвать это
    is_a ($ объект, $ строка);
    

    Пример instanceof:

    // Экземпляр объекта      
    $ object instanceof $ otherObject; 
    
    // Имя класса String
    $ object instanceof $ string;
    
    // Идентификатор класса
    $ object instanceof ClassName;