instanceof се използва, за да се установи дали дадена променлива в PHP представлява инстанцииран обект от определен клас:
Example #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 може също да се използва и за определяне дали променливата е инстанцииран обект от клас, който наследява родителския клас:
Example #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.
Example #3 Употреба на instanceof за проверка дали даден обект не е инстанция на клас
<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
Примерът по-горе ще изведе:
bool(true)
Накрая, instanceof може също да се използва и за да се установи дали дадена променлива представлява инстанция на обект от клас, който осъществява интерфейс:
Example #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 обикновено се използва с буквеното име на класа, той също може да бъде използван и с друг обект или низова променлива:
Example #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)
Има няколко клопки, за които трябва да се внимава. Преди версия 5.1.0 на PHP instanceof ще извика __autoload() ако класът не съществува. Освен това, ако класът не е бил зареден, това ще доведе до фатална грешка. Това може да бъде заобиколено като се използва динамична референция към клас или низова променлива, съдържаща името на класа:
Example #6 Избягване търсенето на клас и фатални грешки с instanceof в PHP 5.0
<?php
$d = 'NotMyClass';
var_dump($a instanceof $d); // в случая фатална грешка няма
?>
Примерът по-горе ще изведе:
bool(false)
Операторът instanceof беше въведен в PHP 5. Преди това се използваше is_a(), но от тогава се препоръчва вместо него да се използва instanceof. От PHP 5.3.0 нататък is_a() вече не е непрепоръчителна.
Вж. също get_class() и is_a().