Operatori
PHP Manual

Operatori di tipi

instanceof è utilizzato per determinare se una variabile PHP è un oggetto istanza di una certa classe:

Example #1 Utilizzo di instanceof con le classi

<?php
class MyClass
{
}

class 
NotMyClass
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>

Il precedente esempio visualizzerà:

bool(true)
bool(false)

instanceof può essere usato anche per determinare se una variabile è un oggetto istanziato da una classe che eredita da una classe parente:

Example #2 Utilizzo di instanceof con le classi ereditate

<?php
class ParentClass
{
}

class 
MyClass extends ParentClass
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>

Il precedente esempio visualizzerà:

bool(true)
bool(true)

Al fine di controllare se un oggetto non è un instanceof di una classe, si può usare l'operatore logico not .

Example #3 Utilizzo di instanceof per controllare se un oggetto non è un'instanceof di una classe

<?php
class MyClass
{
}

$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>

Il precedente esempio visualizzerà:

bool(true)

Infine, instanceof può essere usato anche per deretmnare se una variable è un oggetto istanziato da una classe che implementa una interfaccia:

Example #4 Utilizzo di instanceof per una classe

<?php
interface MyInterface
{
}

class 
MyClass implements MyInterface
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>

Il precedente esempio visualizzerà:

bool(true)
bool(true)

Anche se instanceof è normalmente usata con un nome di classe letterale, può essere usata con un altro oggetto o con una variabile stringa:

Example #5 Utilizzo di instanceof con altre variabili

<?php
interface MyInterface
{
}

class 
MyClass implements MyInterface
{
}

$a = new MyClass;
$b = new MyClass;
$c 'MyClass';
$d 'NotMyClass';

var_dump($a instanceof $b); // $b è un oggetto di classe MyClass
var_dump($a instanceof $c); // $c è la stringa 'MyClass'
var_dump($a instanceof $d); // $d è la stringa 'NotMyClass'
?>

Il precedente esempio visualizzerà:

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

instanceof non genera errori se la variabile che viene controllata non è un oggetto, ma ritorna semplicemente FALSE. Le costanti non sono comunque ammesse.

Example #6 Utilizzo di instanceof per controllare altre variabili

<?php
$a 
1;
$b NULL;
$c imagecreate(55);
var_dump($a instanceof stdClass); // $a è un integer
var_dump($b instanceof stdClass); // $b è NULL
var_dump($c instanceof stdClass); // $c è una risorsa
var_dump(FALSE instanceof stdClass);
?>

Il precedente esempio visualizzerà:

bool(false)
bool(false)
bool(false)
PHP Fatal error:  instanceof expects an object instance, constant given

Ci sono alcune trappole da evitare. Prima di PHP 5.1.0, instanceof chiama __autoload() se il nome della classe non esiste. Inoltre, se la classe non è stata caricata, viene generato un errore fatale. Ciò può essere evitato usando un riferimento dinamico alla classe, o una variabile stringa che contenga il nome della classe:

Example #7 Evitare richerce del nome della classe ed errori fatali con instanceof in PHP 5.0

<?php
$d 
'NotMyClass';
var_dump($a instanceof $d); // l'errore fatale non avviene
?>

Il precedente esempio visualizzerà:

bool(false)

L'operatore instanceof è stato introdotto in PHP 5. Prima di questo si utilizzava is_a(), ma ora is_a() è deprecata in favore di instanceof. Si noti che dal PHP 5.3.0, is_a() non è più deprecata.

Vedere anche get_class() e is_a().


Operatori
PHP Manual