downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

ReflectionClass::isInstantiable> <ReflectionClass::isFinal
[edit] Last updated: Fri, 17 May 2013

view this page in

ReflectionClass::isInstance

(PHP 5)

ReflectionClass::isInstanceVérifie si une classe est une instance d'une autre classe

Description

public bool ReflectionClass::isInstance ( object $object )

Vérifie si une classe est une instance d'une autre classe.

Liste de paramètres

object

L'objet utilisé pour comparer.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec ReflectionClass::isInstance()

<?php
// Exemple d'utilisation
$class = new ReflectionClass('Foo');

if (
$class->isInstance($arg)) {
    echo 
"Oui";
}

// Équivalent à
if ($arg instanceof Foo) {
    echo 
"Oui";
}

// Équivalent à
if (is_a($arg'Foo')) {
    echo 
"Oui";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Oui
Oui
Oui

Voir aussi



add a note add a note User Contributed Notes ReflectionClass::isInstance - [1 notes]
up
0
Peter Kruithof
2 years ago
This function has a flaw in PHP versions < 5.3.* (my tested version was 5.3.2), in which class inheritance is not handled properly. The following test case renders true in 5.3.2, but false on 5.2.9:

<?php
class A {
}

class
B extends A {
    public function
foo(A $a) {
    }
}

$b = new B();

$class = new ReflectionClass('B');
$method = $class->getMethod('foo');
$parameters = $method->getParameters();
$param = $parameters[0];
$class = $param->getClass();

var_dump($class->isInstance($b));
?>

If you're running a PHP version lower than 5.3, my suggestion is to use the following fix:

<?php
[...]

$param = $parameters[0];
$class = $param->getClass();
$classname = $class->getName();

var_dump($b instanceof $classname);
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites