PHP Doku:: Checks class for instance - reflectionclass.isinstance.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzVariablen- und typbezogene ErweiterungenReflectionThe ReflectionClass classReflectionClass::isInstance

Ein Service von Reinhard Neidl - Webprogrammierung.

The ReflectionClass class

<<ReflectionClass::isFinal

ReflectionClass::isInstantiable>>

ReflectionClass::isInstance

(PHP 5)

ReflectionClass::isInstanceChecks class for instance

Beschreibung

public bool ReflectionClass::isInstance ( object $object )

Checks if an object is an instance of a class.

Parameter-Liste

object

The object being compared to.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Beispiele

Beispiel #1 ReflectionClass::isInstance() related examples

<?php
// Example usage
$class = new ReflectionClass('Foo');

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

// Equivalent to
if ($arg instanceof Foo) {
    echo 
"Yes";
}

// Equivalent to
if (is_a($arg'Foo')) {
    echo 
"Yes";
}
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Yes
Yes
Yes

Siehe auch


Ein BenutzerBeitrag:
- Beiträge aktualisieren...
Peter Kruithof
12.07.2010 15:21
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);
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)