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); ?>
<?php class ParentClass { } class MyClass extends ParentClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof ParentClass); ?>
<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
<?php interface MyInterface { } class MyClass implements MyInterface { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof MyInterface); ?>
<?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' ?>
<?php $a = 1; $b = NULL; $c = imagecreate(5, 5); var_dump($a instanceof stdClass); // $a est un entier var_dump($b instanceof stdClass); // $b vaut NULL var_dump($c instanceof stdClass); // $c est une ressource var_dump(FALSE instanceof stdClass); ?>
<?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ée mais is_a() est depuis devenue 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().