Оператор проверки типа
Оператор instanceof
используется для определения того,
является ли текущий объект экземпляром указанного
класса.
Пример #1 Использование instanceof
с классами
<?php
class MyClass
{
}
class NotMyClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>
Результат выполнения данного примера:
bool(true) bool(false)
Оператор instanceof
также может быть использован
для определения, наследует ли определенный объект какому-либо классу:
Пример #2 Использование instanceof
с наследуемыми классами
<?php
class ParentClass
{
}
class MyClass extends ParentClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>
Результат выполнения данного примера:
bool(true) bool(true)
Для проверки непринадлежности объекта некоторому классу,
используйте логический оператор
not
.
Пример #3 Использование instanceof
для проверки того, что объект
не является экземпляром класса
<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
Результат выполнения данного примера:
bool(true)
Наконец, instanceof
может быть также использован для проверки
реализации объектом некоторого интерфейса:
Пример #4 Использование instanceof
с интерфейсами
<?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>
Результат выполнения данного примера:
bool(true) bool(true)
Хотя instanceof
обычно используется с прямо указанным именем класса,
он также может быть использован с другим объектом или строковой переменной:
Пример #5 Использование instanceof
с другими переменными
<?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
$b = new MyClass;
$c = 'MyClass';
$d = 'NotMyClass';
var_dump($a instanceof $b); // $b - объект класса MyClass
var_dump($a instanceof $c); // $c - строка 'MyClass'
var_dump($a instanceof $d); // $d - строка 'NotMyClass'
?>
Результат выполнения данного примера:
bool(true) bool(true) bool(false)
Оператор instanceof не генерирует никаких ошибок, если проверяемая переменная не
является объектом. В этом случае он просто возвращает false
. Константы, тем не менее,
не допускались до PHP 7.3.0.
Пример #6 Пример использования оператора instanceof
для проверки других переменных
<?php
$a = 1;
$b = NULL;
$c = imagecreate(5, 5);
var_dump($a instanceof stdClass); // $a - целое типа integer
var_dump($b instanceof stdClass); // $b - NULL
var_dump($c instanceof stdClass); // $c - значение типа resource
var_dump(FALSE instanceof stdClass);
?>
Результат выполнения данного примера:
bool(false) bool(false) bool(false) PHP Fatal error: instanceof expects an object instance, constant given
Начиная с PHP 7.3.0, константы разрешены в левой части оператора instanceof
.
Пример #7 Использование instanceof
для проверки констант
<?php
var_dump(FALSE instanceof stdClass);
?>
Результат выполнения данного примера в PHP 7.3:
bool(false)
Оператор instanceof
аналогичен функции is_a().