Wer mit PHP dynamisch arbeitet, landet früher oder später bei derselben Frage: Ist diese Variable tatsächlich ein Objekt? PHP liefert dafür ein handliches Werkzeug – is_object()
. Ein winziger Aufruf, ein eindeutiges Ergebnis. Klingt unscheinbar, kann aber den Unterschied zwischen elegant laufendem Code und kryptischem Fehlerlog ausmachen.

1. Einleitung: is_object()
– kleines Helferlein, große Wirkung in PHP
Ganz nüchtern betrachtet prüft is_object()
lediglich, ob eine Variable vom Typ Objekt ist. Mehr nicht. Doch genau diese Klarheit macht sie so wertvoll.
Denk an typische Szenarien: Daten rauschen per API in dein Skript, werden quer durch mehrere Layer gereicht und landen schließlich in einer Funktion, die einen Methodenzugriff erwartet. Wenn dort statt eines Objekts ein Array oder gar ein schlichter String auftaucht, knallt es – eine Methode, die nicht existiert, sorgt für saubere Laufzeitfehler. Mit einer simplen Typprüfung lässt sich dieses Drama elegant abfangen.
Natürlich gibt es Alternativen. instanceof
prüft nicht nur auf Objekte, sondern auch auf konkrete Klassenhierarchien; gettype()
liefert einen String zurück, den du erst interpretieren musst. Beide haben ihre Einsatzgebiete, doch keiner der beiden ist so schnell zur Hand wie is_object()
für den reinen „Objekt-oder-nicht“-Check.
In diesem Leitfaden erfährst du deshalb nicht nur, wie du is_object()
verwendest, sondern auch wann es Sinn ergibt, welche Stolperfallen lauern und welche Best Practices sich im Alltag bewährt haben. Einige Tipps sind offensichtlich, andere überraschen – alle ersparen dir am Ende lästige Debug-Sessions.
2. Grundlagen von is_object()
Bevor du die Funktion effektiv nutzt, lohnt sich ein Blick auf ihre genaue Arbeitsweise. Wir starten mit der grundlegenden Syntax und beleuchten die Rückgabewerte.
Die folgende Übersicht gibt dir einen schnellen Einstieg.
2.1. Syntax
Zunächst werfen wir einen Blick auf den Funktionsaufruf selbst. Die Syntax ist einfach gehalten:
bool is_object(mGemischt $oWert)
Der einzige Parameter, den du übergeben musst, ist die zu prüfende Variable.
- $oWert: Das kann jede beliebige Variable sein, unabhängig vom tatsächlichen Typ.
2.2. Rückgabewert
Wie reagiert die Funktion auf verschiedene Eingaben? Die Antwort ist eindeutig:
- true: Wenn
$oWert
ein Objekt ist, liefert die Funktion den Wert true
zurück. - false: In allen anderen Fällen (Skalare wie Integer, Float, String, Arrays, null oder Ressourcen) gibt sie
false
zurück.
Dieses Verhalten bleibt in der Praxis meist konsistent – mit einer kleinen Ausnahme, die wir später noch ansprechen.
2.3. PHP-Versionskompatibilität
Bereits seit PHP 4 steht die Funktion zur Verfügung. Für fast alle aktuellen Projekte ist die Kompatibilität kein Problem.
Eine wichtige Änderung kam jedoch mit PHP 7.2.0: Seitdem gibt is_object()
auch dann true
zurück, wenn eine Variable vom Typ __PHP_Incomplete_Class
ist. Das betrifft Objekte, die nach einem unserialize()
nicht mehr eindeutig einer bekannten Klasse zugeordnet werden können – meist, weil die Klassendefinition fehlt.
Dieser kleine Unterschied kann für die Fehlerbehandlung wichtig werden. Später im Artikel findest du dafür ein anschauliches Beispiel.
3. Praktische Anwendungsbeispiele (mit interaktiven Code-Snippets)
Es ist sinnvoll, sich den Funktionsumfang direkt im Code anzuschauen. Jedes Beispiel ist kommentiert, erklärt die Ausgabe und gibt dir ein Gefühl für den Alltagseinsatz.
3.1. Grundlegende Verwendung: Prüfung eines gültigen Objekts
Beginnen wir mit einem selbst definierten Objekt.
<?php
/** Definiert eine einfache Klasse */
class oPerson {
public $sName = "Anna";
}
$oInstanz = new oPerson();
if (is_object($oInstanz)) {
echo "Die Variable ist ein Objekt.";
} else {
echo "Die Variable ist KEIN Objekt.";
}
/**
Erwartete Ausgabe:
Die Variable ist ein Objekt.
*/
?>
Auch mit einer Standard-Klasse (stdClass
) funktioniert es:
<?php
$oStandard = new stdClass();
if (is_object($oStandard)) {
echo "stdClass wird korrekt als Objekt erkannt.";
}
/**
Erwartete Ausgabe:
stdClass wird korrekt als Objekt erkannt.
*/
?>
3.2. Prüfung von Nicht-Objekt-Typen
Wie sieht es bei anderen Typen aus? Hier einige Beispiele mit unterschiedlichem Inhalt:
<?php
$iZahl = 42;
$sText = "Beispiel";
$aFeld = [1, 2, 3];
$mNullwert = null;
var_dump(is_object($iZahl)); /** false */
var_dump(is_object($sText)); /** false */
var_dump(is_object($aFeld)); /** false */
var_dump(is_object($mNullwert)); /** false */
?>
Und sogar bei Ressourcen, wie einem Dateihandle, kommt false
zurück:
<?php
$oHandle = fopen(__FILE__, 'r');
var_dump(is_object($oHandle)); /** false (bei Ressourcen) */
fclose($oHandle);
?>
3.3. Einsatz in Kontrollstrukturen
Häufig nutzt man die Funktion, um Zugriffe auf Objekte sicherer zu machen. Hier ein typisches Beispiel:
<?php
function sObjektnameAusgeben(mGemischt $oDaten): void
{
/** Prüft, ob $oDaten ein Objekt mit der Eigenschaft 'sName' ist */
if (is_object($oDaten) && property_exists($oDaten, 'sName')) {
echo "Objektname: " . $oDaten->sName;
} elseif (is_object($oDaten)) {
echo "Die Variable ist ein Objekt, hat aber keine 'sName'-Eigenschaft.";
} else {
echo "Die Variable ist kein Objekt.";
}
}
$oBeispiel = new stdClass();
$oBeispiel->sName = "Peter";
sObjektnameAusgeben($oBeispiel);
/**
Erwartete Ausgabe:
Objektname: Peter
*/
?>
3.4. Der Sonderfall: __PHP_Incomplete_Class
Manchmal stößt man auf deserialisierte Objekte, deren Klassendefinition beim Deserialisieren nicht mehr existiert. Dann entsteht eine Instanz der Klasse __PHP_Incomplete_Class
.
Seit PHP 7.2.0 gibt is_object()
hier true
zurück. Das kann zu Verwirrung führen:
<?php
/** Simuliert eine unserialisierte Instanz einer unbekannten Klasse */
$sSerialisiert = 'O:8:"Unbekannt":0:{}';
$mWert = unserialize($sSerialisiert);
if (is_object($mWert)) {
echo "is_object() gibt TRUE zurück, auch bei __PHP_Incomplete_Class";
} else {
echo "is_object() gibt FALSE zurück";
}
/**
Erwartete Ausgabe (ab PHP 7.2.0):
is_object() gibt TRUE zurück, auch bei __PHP_Incomplete_Class
*/
?>
Der Umgang damit erfordert Achtsamkeit, da diese “Objekte” oft nicht alle Methoden oder Eigenschaften bieten, die du erwartest.
4. is_object() im Vergleich: Wann welche Funktion nutzen?
Nicht immer reicht eine reine Objekt-Prüfung. Manchmal musst du wissen, zu welcher Klasse das Objekt gehört, oder ob es ein bestimmtes Interface implementiert.
Hier die wichtigsten Alternativen im Vergleich.
4.1. is_object() vs. instanceof Operator
Mit is_object()
prüfst du nur, ob etwas irgendein Objekt ist. Der Operator instanceof
gibt dir mehr Kontrolle:
<?php
class oHund {}
$oRex = new oHund();
var_dump(is_object($oRex)); /** true */
var_dump($oRex instanceof oHund); /** true */
var_dump($oRex instanceof stdClass); /** false */
?>
Verwende is_object()
, wenn du ausschließlich wissen willst, ob die Variable ein Objekt ist. Willst du gezielt eine Klasse prüfen, setze auf instanceof
.
4.2. is_object() vs. is_a() Funktion
Auch is_a()
prüft, ob eine Variable ein Objekt einer bestimmten Klasse (oder deren Elternklasse) ist. Sie lässt sich sogar mit Klassennamen als String nutzen:
<?php
class oKatze {}
$oMieze = new oKatze();
var_dump(is_a($oMieze, 'oKatze')); /** true */
var_dump(is_a($oMieze, 'stdClass')); /** false */
?>
is_a()
ist etwas flexibler als instanceof
, aber der Operator wird häufiger verwendet und ist oft besser lesbar.
4.3. Tabelle: Kurzübersicht der Unterschiede
Eine übersichtliche Tabelle hilft dir bei der Wahl des richtigen Werkzeugs:
Funktion/Operator | Prüft auf Typ? | Prüft auf spezifische Klasse/Interface? | Bemerkung |
is_object() | Ja (Objekt) | Nein | Schnell, einfach, sehr robust |
instanceof | Ja (Objekt) | Ja | Empfohlen für Klassenprüfungen |
is_a() | Ja (Objekt) | Ja | Mit Klassennamen als String |
5. Wichtige Überlegungen und Häufige Fehler (Best Practices & Fallstricke)
Fehlerquellen lauern oft dort, wo man sie nicht erwartet. Mit diesen Tipps wirst du sicherer im Umgang mit is_object()
.
5.1. Umgang mit null
Eine häufige Stolperfalle: is_object(null)
liefert stets false
. Wenn also die Variable nicht initialisiert ist oder das Ergebnis aus einer Datenbankabfrage stammt, beachte diesen Aspekt.
5.2. __PHP_Incomplete_Class bewusst behandeln
Wenn du Objekte mit unserialize()
einliest und die Klasse nicht vorhanden ist, entsteht eine Instanz von __PHP_Incomplete_Class
. Für solche Variablen gibt is_object()
zwar true
zurück, aber sie verhalten sich nicht wie normale Objekte. Prüfe daher bei Bedarf auch den Klassennamen mit get_class()
.
5.3. Nicht für spezifische Typprüfungen missbrauchen
Nutze is_object()
nicht, wenn du wissen willst, ob ein Objekt von einer bestimmten Klasse stammt – dafür gibt es instanceof
oder is_a()
.
In der Praxis ist is_object()
so schnell, dass du sie auch in großen Schleifen einsetzen kannst. Mikro-Optimierungen lohnen sich hier fast nie.
5.5. Lesbarkeit des Codes
Setze is_object()
gezielt ein, um deinen Code verständlicher und weniger fehleranfällig zu machen. Besonders bei dynamischen Eingaben hilft die Funktion, Fehler frühzeitig abzufangen.
6. Fortgeschrittene Szenarien und Edge Cases
Daten aus externen Quellen wie APIs oder aus JSON-Dateien sind in PHP oft nicht eindeutig typisiert. Mal kommt ein Array, mal ein Objekt – besonders, wenn etwa ein leeres Array {}
oder ein Objekt mit Daten geliefert wird. Genau hier wird is_object()
unverzichtbar, weil ohne klare Typprüfung Fehler beim Zugriff auf Eigenschaften oder Methoden drohen.
Stelle dir vor, du rufst eine API ab und wandelst die Antwort dynamisch mit json_decode()
in eine PHP-Variable um. Standardmäßig erzeugt json_decode()
ein Objekt, aber mit bestimmten Parametern oder speziellen Antworten (z. B. leeres JSON) kann auch ein Array oder sogar null
entstehen.
Praxisbeispiel: Dynamische API-Antwort absichern
<?php
/** Antwort von einer API als JSON simulieren */
$sJsonDaten = '{"sName": "BeispielObjekt", "iWert": 42}';
$oAntwort = json_decode($sJsonDaten); /* Standardmäßig: stdClass-Objekt */
/** Überprüfung, ob wirklich ein Objekt vorliegt */
if (is_object($oAntwort)) {
echo "Objektname: " . $oAntwort->sName . "n";
echo "Wert: " . $oAntwort->iWert . "n";
} else {
echo "Unerwarteter Typ – kein Objekt!n";
}
/** Beispiel für mögliche Fallstricke: */
$sLeeresObjekt = '{}'; /* JSON leer */
$oLeeresAntwort = json_decode($sLeeresObjekt);
if (is_object($oLeeresAntwort)) {
echo "Auch ein leeres JSON ergibt ein Objekt (stdClass).n";
} else {
echo "Leeres JSON – aber KEIN Objekt!n";
}
/** Noch ein Edge Case: API liefert '[]' */
$sLeeresArray = '[]';
$oArrayAntwort = json_decode($sLeeresArray);
if (is_object($oArrayAntwort)) {
echo "[] wurde als Objekt erkannt.n";
} elseif (is_array($oArrayAntwort)) {
echo "[] wurde als Array erkannt – Achtung bei Zugriffen!n";
} else {
echo "[] wurde als anderer Typ erkannt.n";
}
?>
Was zeigt dieses Beispiel?
-
{"...":...}
wird als Objekt (stdClass
) erkannt, das sicher mit is_object()
geprüft und verarbeitet werden kann.
-
{}
(leeres JSON-Objekt) ergibt ebenfalls ein leeres Objekt, das aber keine Eigenschaften hat – auch hier bleibt der Typ ein Objekt.
-
[]
wird hingegen als Array interpretiert. Greifst du hier wie bei einem Objekt auf Eigenschaften zu, entsteht ein Fehler.
-
Der Einsatz von is_object()
(ergänzt durch z. B. is_array()
) verhindert diese typischen Stolperfallen und sorgt für robusten, fehlertoleranten Code.
Gerade bei variablen Antworten von APIs, unsicheren Datenquellen oder dynamischer Verarbeitung schützt dich diese Typprüfung vor schwer auffindbaren Bugs und Laufzeitfehlern. So bleibt dein Code stabil und wartbar – egal, wie unvorhersehbar die Eingabedaten sind.
7. Zusammenfassung: Die Kernpunkte zu is_object()
Hier findest du die wichtigsten Erkenntnisse auf einen Blick:
is_object()
prüft, ob eine Variable ein Objekt ist – nicht mehr, aber auch nicht weniger. - In Kontrollstrukturen verhindert sie, dass du Methoden auf Nicht-Objekten aufrufst.
- Spezifische Typprüfungen übernimmst du mit
instanceof
oder is_a()
. - Seit PHP 7.2.0 gilt auch
__PHP_Incomplete_Class
als Objekt. - Die Funktion arbeitet schnell und unkompliziert.
- Setze sie gezielt ein, um Fehler und unerwartetes Verhalten im Code zu vermeiden.
8. Weiterführende Ressourcen und Verweise
Abschließend findest du hier die wichtigsten Links für die Vertiefung: