Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP instanceof: Objekte auf Klasse oder Interface prüfen

Sie befinden sich: Home > Php Tutorial > PHP instanceof: Objekte...

PHP instanceof: Objekte auf Klasse oder Interface prüfen


Eintrag am:  09.04.2026
Hits / Besucher:  26
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

In der objektorientierten Programmierung ist es häufig nötig zu prüfen, ob ein Objekt zu einer bestimmten Klasse gehört oder ein bestimmtes Interface implementiert. Der instanceof-Operator in PHP erledigt genau das. Er gibt true oder false zurück und ermöglicht so Typpruefungen zur Laufzeit. In diesem Tutorial lernst du die Syntax, das Verhalten bei Vererbung und Interfaces sowie den Unterschied zur Funktion is_a().

Illustration zum Tutorial: PHP instanceof: Objekte auf Klasse oder Interface prüfen

Zunächst wird erklärt, wie der Operator grundlegend funktioniert und welches Ergebnis er bei verschiedenen Konstellationen liefert.

Was ist der instanceof-Operator?

Der instanceof-Operator prüft, ob ein Objekt eine Instanz einer bestimmten Klasse, einer Elternklasse oder einer Klasse ist, die ein bestimmtes Interface implementiert. Das Ergebnis ist immer ein boolescher Wert: true oder false. Der Operator wird häufig in Bedingungen eingesetzt, um abhängig vom Typ eines Objekts unterschiedliche Aktionen auszuführen.

Grundlegende Syntax

Die Syntax ist einfach: Links steht die Variable, rechts der Klassenname.

<?php

class Tier {}
class Hund extends Tier {}

$hund = new Hund();

var_dump($hund instanceof Hund);
/* bool(true) */

var_dump($hund instanceof Tier);
/* bool(true) - auch Elternklasse */

Der Operator gibt true zurück, wenn das Objekt eine direkte Instanz der Klasse ist oder wenn die Klasse eine Elternklasse in der Vererbungshierarchie ist.

instanceof mit Vererbung

Bei Vererbung gibt instanceof für die Klasse selbst und alle Elternklassen true zurück. Das bedeutet: Ein Objekt der Klasse Hund ist gleichzeitig eine Instanz von Hund und von Tier. Dieses Verhalten spiegelt das Liskovsche Substitutionsprinzip wider. Überall, wo ein Objekt vom Typ Tier erwartet wird, kann auch ein Hund verwendet werden. Die Prüfung erstreckt sich über die gesamte Vererbungskette, unabhängig von der Tiefe der Hierarchie.

Wenn der exakte Typ eines Objekts geprüft werden soll, ohne die Vererbungshierarchie zu berücksichtigen, kann stattdessen get_class() oder der Vergleich $obj::class === 'Hund' verwendet werden.

instanceof mit Interfaces

Der Operator funktioniert auch mit Interfaces. Wenn eine Klasse ein Interface implementiert, gibt instanceof für dieses Interface true zurück.

<?php

interface Serialisierbar
{
public function serialisieren(): string;
}

class User implements Serialisierbar
{
public function serialisieren(): string
{
return json_encode(['name' => 'Max']);
}
}

$user = new User();
if ($user instanceof Serialisierbar) {
echo $user->serialisieren();
}
/* Ausgabe: {"name":"Max"} */

Diese Prüfung ist besonders nützlich in Funktionen, die mit verschiedenen Objekttypen arbeiten. Bevor eine Interface-spezifische Methode aufgerufen wird, lässt sich so sicherstellen, dass das Objekt diese Methode auch tatsächlich besitzt.

instanceof und Namespaces

Bei der Verwendung von Namespaces muss der Klassenname entweder vollqualifiziert angegeben oder vorher mit use importiert werden. Ohne den korrekten Namespace findet PHP die Klasse nicht und instanceof gibt immer false zurück.

<?php

namespace AppServices;

use AppModelsUser;

function verarbeiten(object $obj): void
{
if ($obj instanceof User) {
/* $obj ist vom Typ AppModelsUser */
}
}

instanceof vs. is_a()

Die Funktion is_a() ist das funktionale Gegenstück zum instanceof-Operator. Der Hauptunterschied: is_a() akzeptiert Klassennamen auch als String, während instanceof einen Klassennamen direkt im Code erwartet.

<?php

$hund = new Hund();

/* instanceof: Klassenname direkt */
$istTier = $hund instanceof Tier;

/* is_a(): akzeptiert auch Strings */
$istTier = is_a($hund, 'Tier');

/* Dritter Parameter true: prueft Klassennamen statt Objekt */
$istTier = is_a('Hund', 'Tier', true);

Der dritte Parameter von is_a() erlaubt es, die Vererbung zu prüfen, ohne ein Objekt erstellen zu müssen. Das ist nützlich, wenn der Klassenname als String vorliegt, etwa aus einer Konfiguration oder Datenbank.

instanceof in der Praxis

Typpruefung in Funktionen

In Funktionen, die verschiedene Objekttypen akzeptieren, wird instanceof für Typ-Narrowing eingesetzt. Statische Analyse-Werkzeuge wie PHPStan erkennen instanceof-Prüfungen und können innerhalb des Blocks den Typ des Objekts einschränken.

Fehlerbehandlung mit instanceof

Ein häufiger Anwendungsfall ist die Unterscheidung verschiedener Exception-Typen im catch-Block.

<?php

try {
/* Code der eine Exception werfen kann */
throw new InvalidArgumentException('Ungueltiger Wert');
} catch (Throwable $e) {
if ($e instanceof InvalidArgumentException) {
echo 'Validierungsfehler: ' . $e->getMessage();
} else {
echo 'Allgemeiner Fehler: ' . $e->getMessage();
}
}

In modernem PHP ist es allerdings oft besser, mehrere catch-Blöcke mit spezifischen Exception-Typen zu verwenden, statt innerhalb eines catch-Blocks mit instanceof zu unterscheiden.

flowchart TD
    A["$hund instanceof Hund"] --> B{Ist Instanz von Hund?}
    B -->|Ja| C["true"]
    A2["$hund instanceof Tier"] --> D{Ist Instanz von Tier?}
    D -->|Ja, durch Vererbung| E["true"]
    A3["$hund instanceof Vogel"] --> F{Ist Instanz von Vogel?}
    F -->|Nein| G["false"]

Typische Fehler und Stolperfallen

Beim Einsatz von instanceof gibt es einige Punkte zu beachten:

  • Wenn die Variable kein Objekt ist (z.B. null, ein String oder ein Integer), gibt instanceof false zurück, ohne einen Fehler zu werfen. Das kann zu schwer auffindbaren Bugs führen, wenn nicht bedacht wird, dass die Variable möglicherweise kein Objekt enthält.
  • instanceof prüft die gesamte Klassenhierarchie, nicht nur den exakten Typ. Wer nur den exakten Typ prüfen möchte, sollte get_class() verwenden.
  • Bei der Arbeit mit Namespaces muss der Klassenname korrekt importiert sein. Ohne use-Import oder vollqualifizierten Namen gibt instanceof immer false zurück, ohne eine Warnung auszugeben.
  • instanceof kann auch mit Enums verwendet werden, da Enum-Cases Instanzen des Enums sind.

Fazit

Der instanceof-Operator ist ein unverzichtbares Werkzeug für Typpruefungen in PHP. Er prüft zuverlässig, ob ein Objekt zu einer bestimmten Klasse gehört, von einer Elternklasse erbt oder ein Interface implementiert. In Kombination mit Namespaces, Vererbung und Interfaces ermöglicht er flexible und typsichere Prüfungen. Die Funktion is_a() bietet als Alternative die Möglichkeit, auch mit String-basierten Klassennamen zu arbeiten. Wer instanceof beherrscht, hat ein grundlegendes Werkzeug für typsichere und robuste PHP-Anwendungen in der Hand.

 


Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.