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 und...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
 
 
 

PHP is_object() meistern – Der komplette Guide

Sie befinden sich: Home > Php Tutorial > PHP is_object(): Schnelltes...

PHP is_object(): Schnelltest für Objekte in PHP


Eintrag am:  25.06.2025
Hits / Besucher:  843
Sprache:  Deutsch
Kategorie:  Fortgeschrittene Tut...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

PHP kennt verschiedene Datentypen, und nicht immer ist auf den ersten Blick klar, ob eine Variable ein Objekt, ein Array oder einen einfachen Skalarwert enthält. Die Funktion is_object() liefert true, wenn die übergebene Variable eine Instanz einer Klasse ist. Besonders bei der Arbeit mit JSON-Daten, dynamischen Konfigurationen oder Legacy-Code ohne Type Hints ist diese Prüfung ein wichtiges Werkzeug.

graph TD
    A["Variable pruefen"] --> B{"Ziel?"}
    B -->|"Irgendein Objekt"| C["is_object()"]
    B -->|"Bestimmte Klasse"| D["instanceof"]
    B -->|"Klasse als String"| E["is_a()"]
    C --> F["true / false"]
    D --> F
    E --> F

Wann brauche ich is_object()?

In vielen Situationen kennt PHP den Typ einer Variablen erst zur Laufzeit. Dann ist is_object() die richtige Wahl:

  • JSON-APIs: json_decode() ohne zweiten Parameter liefert Objekte, mit true liefert es Arrays. Wenn du nicht kontrollierst, welcher Modus verwendet wurde, prüfst du mit is_object().
  • Legacy-Code: Ältere Projekte ohne Type Hints geben manchmal Objekte, manchmal Arrays zurück. Die Prüfung verhindert Laufzeitfehler.
  • Dynamische Konfiguration: Werte aus YAML- oder INI-Dateien können je nach Parser als Objekte oder Arrays ankommen.
  • Debugging: Zusammen mit gettype() hilft is_object() dabei, unbekannte Datenstrukturen zu analysieren.

Grundlegende Verwendung

is_object() gibt true zurück, wenn die Variable eine Objektinstanz ist. Bei allen anderen Typen, einschließlich Arrays und null, liefert sie false:

<?php

$objekt = new stdClass();
$objekt->name = "Test";

$array = ["name" => "Test"];
$text = "Hallo";
$leer = null;

var_dump(is_object($objekt)); // bool(true)
var_dump(is_object($array)); // bool(false)
var_dump(is_object($text)); // bool(false)
var_dump(is_object($leer)); // bool(false)
?>

Auch anonyme Klassen und Closures sind Objekte. Ein is_object()-Aufruf auf eine anonyme Funktion gibt daher ebenfalls true zurück.

Typisches Einsatzgebiet: JSON-Daten absichern

Beim Dekodieren von JSON-Daten entscheidet der zweite Parameter von json_decode(), ob das Ergebnis ein Objekt oder ein assoziatives Array wird. In der Praxis kann man sich nicht immer darauf verlassen:

<?php

$json = '{"name": "Max", "alter": 28}';
$daten = json_decode($json);

if (is_object($daten)) {
echo $daten->name;
} elseif (is_array($daten)) {
echo $daten["name"];
} else {
echo "Ungueltiges JSON-Format.";
}
?>

Dieser Code funktioniert unabhängig davon, ob json_decode() ein Objekt oder Array liefert. So bleibt der Code flexibel und fehlerfrei.

Objekt mit Eigenschaft prüfen

Bevor du auf eine Eigenschaft eines Objekts zugreifst, solltest du sicherstellen, dass die Variable tatsächlich ein Objekt ist und die Eigenschaft existiert:

<?php

function gibEigenschaft(
mixed $daten,
string $eigenschaft
): mixed {
if (is_object($daten)
&& property_exists($daten, $eigenschaft)
) {
return $daten->$eigenschaft;
}
return null;
}

$api = json_decode('{"status": "ok"}');
echo gibEigenschaft($api, "status"); // ok
echo gibEigenschaft("kein Objekt", "x"); // null
?>

Die Kombination aus is_object() und property_exists() verhindert sowohl Typfehler als auch den Zugriff auf nicht vorhandene Eigenschaften.

Unterschied zu instanceof und is_a()

Während is_object() nur prüft, ob eine Variable überhaupt ein Objekt ist, gehen instanceof und is_a() einen Schritt weiter. Sie prüfen, ob das Objekt zu einer bestimmten Klasse oder einem Interface gehört:

<?php

class Tier {}
class Hund extends Tier {}

$rex = new Hund();

/* is_object: Ist es irgendein Objekt? */
var_dump(is_object($rex)); // true

/* instanceof: Ist es ein Hund? */
var_dump($rex instanceof Hund); // true
var_dump($rex instanceof Tier); // true

/* is_a: Wie instanceof, aber
Klassenname als String */
$klasse = "Hund";
var_dump(is_a($rex, $klasse)); // true
?>

instanceof eignet sich für statische Prüfungen, wenn der Klassenname zur Entwicklungszeit bekannt ist. is_a() ist die richtige Wahl, wenn der Klassenname erst zur Laufzeit feststeht, etwa aus einer Konfigurationsdatei oder Datenbank. is_object() beantwortet dagegen nur die grundlegende Frage: Habe ich es überhaupt mit einem Objekt zu tun?

Type Hinting als moderne Alternative

Seit PHP 7.2 gibt es den object Type Hint für Funktionsparameter. Damit übernimmt PHP selbst die Prüfung und wirft einen TypeError, wenn ein falscher Typ übergeben wird:

<?php

function verarbeite(object $daten): string
{
return get_class($daten) . " verarbeitet";
}

echo verarbeite(new stdClass()); // stdClass verarbeitet
/* verarbeite("text"); -> TypeError */
?>

Type Hints sind die sauberere Lösung für eigene Funktionen. is_object() bleibt aber unverzichtbar für dynamische Daten, bei denen der Typ erst zur Laufzeit bekannt ist, etwa bei json_decode() oder dem Auslesen von Cache-Einträgen.

Union Types seit PHP 8.0

Mit PHP 8.0 lassen sich mehrere Typen in einem Parameter kombinieren. Das ist praktisch, wenn eine Funktion sowohl Objekte als auch Arrays akzeptieren soll:

<?php

function toArray(array|object $daten): array
{
if (is_object($daten)) {
return (array) $daten;
}
return $daten;
}

$obj = new stdClass();
$obj->name = "Test";

print_r(toArray($obj));
/* Array ( [name] => Test ) */

print_r(toArray(["name" => "Test"]));
/* Array ( [name] => Test ) */
?>

Auch mit Union Types brauchst du innerhalb der Funktion manchmal noch is_object(), um den genauen Typ zu unterscheiden und entsprechend zu reagieren.

Sonderfall: __PHP_Incomplete_Class

Wird ein serialisiertes Objekt per unserialize() geladen, dessen Klasse nicht mehr existiert, erzeugt PHP ein Objekt vom Typ __PHP_Incomplete_Class. Auch dieses Objekt besteht den is_object()-Test:

<?php

/* Simuliert ein Objekt einer
nicht mehr existierenden Klasse */
$serial = 'O:12:"AlteKlasse":1:{s:4:"name";s:4:"Test";}';
$obj = unserialize($serial);

var_dump(is_object($obj)); // true
var_dump(get_class($obj));
// __PHP_Incomplete_Class

/* Zugriff auf Eigenschaften schlaegt
leise fehl */
var_dump($obj->name ?? "Fehlt"); // Fehlt
?>

Dieses Verhalten tritt häufig auf, wenn Session-Daten Objekte enthalten und die zugehörige Klasse nicht geladen wurde. Am sichersten lässt sich das über den Klassennamen abfangen:

<?php

if (is_object($obj)
&& get_class($obj) !== "__PHP_Incomplete_Class"
) {
/* Objekt ist vollstaendig und nutzbar */
echo $obj->name;
}
?>

Verwandte Funktionen

PHP bietet mehrere Funktionen zur Typprüfung. Je nach Situation ist eine andere die richtige Wahl:

  • is_array() prüft, ob eine Variable ein Array ist
  • is_string() erkennt Zeichenketten
  • gettype() gibt den Typnamen als String zurück
  • get_class() liefert den Klassennamen eines Objekts
  • instanceof prüft auf eine bestimmte Klasse oder Interface

 


Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
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.