Opérateurs de types

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)

     

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

     

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