Op�rateurs de types

instanceof est utilis� pour d�terminer si une variable PHP est un objet instanci� d'une certaine classe :

Exemple #1 Utilisation de instanceof avec des classes

<?php
class MaClasse
{
}
class 
PasMaClasse
{
}
$a = new MaClasse;

var_dump($a instanceof MaClasse);
var_dump($a instanceof PasMaClasse);
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(false)

instanceof peut �galement �tre utilis� pour d�terminer si une variable est un objet instanci� d'une classe qui h�rite d'une classe parente :

Exemple #2 Utilisation de instanceof avec des classes h�rit�es

<?php
class ParentClass
{
}
class 
MyClass extends ParentClass
{
}
$a = new MyClass;

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

L'exemple ci-dessus va afficher :

bool(true)
bool(true)

Pour v�rifier si un objet n'est pas une instance d'une classe, l'op�rateur logique not peut �tre utilis�.

Exemple #3 Utilisation de instanceof pour v�rifier que l'objet n'est pas une instance de la classe

<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>

L'exemple ci-dessus va afficher :

bool(true)

Et finalement, instanceof peut �tre utilis� pour d�terminer si une variable est un objet instanci� d'une classe qui impl�mente une interface :

Exemple #4 Utilisation de instanceof pour une classe

<?php
interface MyInterface
{
}
class 
MyClass implements MyInterface
{
}
$a = new MyClass;

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

L'exemple ci-dessus va afficher :

bool(true)
bool(true)

Bien que instanceof soit habituellement utilis� avec un nom de classe litt�ral, il peut �galement �tre utilis� avec un autre objet ou une cha�ne repr�sentant une variable :

Exemple #5 Utilisation de instanceof avec d'autres variables

<?php
interface MyInterface
{
}
class 
MyClass implements MyInterface
{
}
$a = new MyClass;
$b = new MyClass;
$c 'MyClass';
$d 'NotMyClass';
var_dump($a instanceof $b); // $b est un objet de la classe MyClass
var_dump($a instanceof $c); // $c est une cha�ne 'MyClass'
var_dump($a instanceof $d); // $d est une cha�ne 'NotMyClass'
?>

L'exemple ci-dessus va afficher :

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

Il y a quelque pi�ge � �viter. Avant PHP version 5.1.0, instanceof appellera __autoload() si le nom de la classe n'existe pas. De plus, si la classe n'a pas �t� charg�e, une erreur fatale sera �mise. Ceci peut fonctionner en utilisant une r�f�rence de classe dynamique, ou une cha�ne repr�sentant une variable contenant le nom de la classe :

Exemple #6 Pas de recherche sur le nom de la classe et une erreur fatale avec instanceof en PHP 5.0

<?php
$d 
'NotMyClass';
var_dump($a instanceof $d); // no fatal error here
?>

L'exemple ci-dessus va afficher :

bool(false)

L'op�rateur instanceof a �t� introduit en PHP 5. Avant cette version, is_a() �tait utilis� mais is_a() est depuis devenu obsol�te, en faveur de instanceof. Notez que depuis PHP 5.3.0, is_a() n'est de nouveau plus obsol�te.

Voir aussi get_class() et is_a().