Оператори
PHP Manual

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

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().


Оператори
PHP Manual