Typ-Operatoren
instanceof
wird dazu verwendet um festzustellen, ob ein
gegebenes Objekt ein Objekt ist, das zu einer bestimmten
Klasse gehört.
Beispiel #1 Die Verwendung von instanceof
mit Klassen
<?php
class MyClass
{
}
class NotMyClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(false)
instanceof
kann auch verwendet werden, um zu bestimmen,
ob ein Variable ein Exemplar einer Klasse ist, die von einer Elternklasse
erbt:
Beispiel #2 Verwendung von instanceof
mit ererbten Klassen
<?php
class ParentClass
{
}
class MyClass extends ParentClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(true)
Um zu prüfen, ob ein Objekt nicht eine Instanz einer
Klasse ist, kann der
logische nicht
-Operator
verwendet werden.
Beispiel #3
Verwendung von instanceof
, um zu prüfen, ob ein
Objekt nicht eine Instanz einer Klasse ist
<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true)
Schließlich kann instanceof
auch dazu verwendet werden,
um zu bestimmen, ob eine Variable ein instanziiertes Objekt einer Klasse
ist, die ein Interface
implementiert:
Beispiel #4 Verwendung von instanceof
mit Interfaces
<?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(true)
Obwohl instanceof
üblicherweise mit einem
Klassennamensbezeichner verwendet wird, kann es auch mit einem anderen
Objekt oder einer Zeichenkettenvariablen verwendet werden:
Beispiel #5 Verwendung von instanceof
mit anderen Variablen
<?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
$b = new MyClass;
$c = 'MyClass';
$d = 'NotMyClass';
var_dump($a instanceof $b); // $b ist ein Exemplar der Klasse MyClass
var_dump($a instanceof $c); // $c ist die Zeichenkette 'MyClass'
var_dump($a instanceof $d); // $d ist die Zeichenkette 'NotMyClass'
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) bool(true) bool(false)
instanceof löst keinen Fehler aus, wenn die getestete Variable kein Objekt
ist; es gibt dann einfach false
zurück. Konstanten waren allerdings vor
PHP 7.3.0 nicht erlaubt.
Beispiel #6 Verwendung von instanceof
um andere Variablen zu prüfen
<?php
$a = 1;
$b = NULL;
$c = imagecreate(5, 5);
var_dump($a instanceof stdClass); // $a ist eine Ganzzahl
var_dump($b instanceof stdClass); // $b ist NULL
var_dump($c instanceof stdClass); // $c ist ein Ressource
var_dump(FALSE instanceof stdClass);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(false) bool(false) PHP Fatal error: instanceof expects an object instance, constant given
Von PHP 7.3.0 an sind Konstanten auf der linken Seite des
instanceof
-Operators erlaubt.
Beispiel #7 Verwendung von instanceof
um Konstanten zu prüfen
<?php
var_dump(FALSE instanceof stdClass);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe mit PHP 7.3:
bool(false)
Seit PHP 8.0.0 kann instanceof
mit beliebigen
Ausdrücken verwendet werden. Der Ausdruck muss in Klammern eingeschlossen
sein und einen String erzeugen.
Beispiel #8 Verwendung von instanceof
mit einem beliebigen Ausdruck
<?php
class ClassA extends \stdClass {}
class ClassB extends \stdClass {}
class ClassC extends ClassB {}
class ClassD extends ClassA {}
function getSomeClass(): string
{
return ClassA::class;
}
var_dump(new ClassA instanceof ('std' . 'Class'));
var_dump(new ClassB instanceof ('Class' . 'B'));
var_dump(new ClassC instanceof ('Class' . 'A'));
var_dump(new ClassD instanceof (getSomeClass()));
?>
Das oben gezeigte Beispiel erzeugt mit PHP 8 folgende Ausgabe:
bool(true) bool(true) bool(false) bool(true)
Der instanceof
-Operator hat mit der Funktion
is_a() eine funktionale Variante.