Оператор проверки типа

Оператор instanceof определяет, относится ли сохранённый в PHP-переменной объект к конкретному классу.

Пример #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) 

Начиная с PHP 8.0.0 instanceof можно использовать с произвольными выражениями. Выражение должно быть заключено в круглые скобки и быть строкой (string).

Пример #8 Пример использования instanceof с произвольным выражением

<?php

class ClassA extends \stdClass {}
class
ClassB extends \stdClass {}
class
ClassC extends ClassB {}
class
ClassD extends ClassA {}

function
getSomeClass(): string
{
return
ClassA::class;
}

var_dump(new ClassA instanceof ('std' . 'Class'));
var_dump(new ClassB instanceof ('Class' . 'B'));
var_dump(new ClassC instanceof ('Class' . 'A'));
var_dump(new ClassD instanceof (getSomeClass()));

Результат выполнения приведённого примера в PHP 8:

 bool(true) bool(true) bool(false) bool(true) 

Оператор instanceof аналогичен функции is_a().

Смотрите также

To Top