instanceof est utilisé pour déterminer si une variable PHP est un objet instancié d'une certaine classe :
Exemple 15.16. 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)
Exemple 15.17. 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)
Exemple 15.18. 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 15.19. 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 appelera __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 15.20. 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 .
Voir aussi get_class() et is_a() .