В чем разница между функцией is_a () и instanceof в PHP?
Опубликовано: 4 Февраля, 2022
Is_a () - это встроенная функция в PHP, которая используется для проверки того, принадлежит ли данный объект данному классу или нет. Он также проверяет, является ли данный класс одним из родителей данного объекта или нет.
Синтаксис:
bool is_a ($ объект, $ имя_класса, $ allow_string)
Параметры: эта функция принимает три параметра, как указано выше и описано ниже:
- объект: этот параметр используется для хранения тестируемого объекта.
- class_name: этот параметр используется для хранения имени класса.
- allow_string: если для этого параметра задано значение False, строковое имя класса в качестве объекта не допускается.
Возвращаемое значение: эта функция возвращает True, если объект принадлежит к этому классу или имеет этот класс в качестве одного из своих родителей, иначе она вернет значение False.
Ниже программы иллюстрируют функцию is_a ():
Оператор 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;