W3docs

is_object()

Die PHP-Funktion is_object() prüft, ob eine Variable ein Objekt ist. Syntax, Rückgabewert, typische Fallstricke (json_decode, Casts, Closures) und Unterschied zu instanceof.

Einführung

is_object() ist eine eingebaute PHP-Funktion, die prüft, ob eine Variable ein Objekt enthält — also eine Instanz einer Klasse. Sie gibt einen boolean zurück und wird daher am häufigsten in einer if-Anweisung verwendet, um Code abzusichern, bevor eine Methode aufgerufen oder eine Eigenschaft eines Wertes unbekannten Typs gelesen wird.

Ein Objekt ist ein Wert, der aus einer Klasse mit new erstellt wird (oder von einer Factory, einem Datenbanktreiber, json_decode() usw. zurückgegeben wird). Das Aufrufen einer Methode auf etwas, das kein Objekt ist, löst einen fatalen Error aus — daher ist die vorherige Prüfung ein gängiges defensives Muster bei der Verarbeitung von Eingaben unbekannter Form.

Syntax

is_object(mixed $value): bool
  • $value — die zu prüfende Variable. Jeder Typ wird akzeptiert.
  • Gibt true zurück, wenn $value ein Objekt ist, false für jeden anderen Typ (string, int, array, null usw.).

Grundlegendes Beispiel

php— editable, runs on the server

Hier ist $obj eine Instanz von MyClass, daher gibt is_object() true zurück; $text ist ein string, daher gibt es false zurück.

Warum var_dump und nicht echo? Wenn man einen boolean mit echo ausgibt, wird true als 1 angezeigt, aber false als leerer string — daher sieht echo is_object($text) aus, als hätte es nichts ausgegeben. var_dump() zeigt den Typ explizit an (bool(true) / bool(false)), was Typprüfungen beim Lernen wesentlich leichter lesbar macht.

Einen Methodenaufruf absichern

Die häufigste praktische Verwendung ist das Absichern von Code, der ein Objekt voraussetzt:

<?php
function describe($value): string {
  if (is_object($value)) {
    return "Got an object of class " . get_class($value);
  }
  return "Not an object: " . gettype($value);
}

echo describe(new MyClass()), "\n"; // Got an object of class MyClass
echo describe("hello"), "\n";       // Not an object: string
echo describe([1, 2, 3]), "\n";     // Not an object: array
?>

Die Kombination von is_object() mit get_class() ermöglicht es, auf den konkreten Typ zu verzweigen, sobald es sicher ist.

Was als Objekt gilt

Einige Werte, die wie einfache Daten wirken, sind in PHP tatsächlich Objekte:

<?php
var_dump(is_object((object) ["a" => 1]));   // bool(true)  — array cast to stdClass
var_dump(is_object(json_decode('{"a":1}'))); // bool(true)  — default decode returns an object
var_dump(is_object(fn() => 1));              // bool(true)  — closures are Closure objects
var_dump(is_object(null));                   // bool(false)
var_dump(is_object([1, 2, 3]));              // bool(false) — arrays are NOT objects
?>

Die letzten beiden sind die üblichen Fallstricke: null und arrays sind keine Objekte. Wenn Sie zwischen diesen unterscheiden müssen, verwenden Sie is_null() und is_array().

Verwandte Funktionen

FunktionPrüft auf
is_object()eine Objektinstanz
is_array()ein array
is_string()einen string
is_int()einen integer
is_null()den null-Wert
gettype()gibt den Typnamen als string zurück

Wenn Sie einen instanceof-Test für eine bestimmte Klasse benötigen und nicht nur für "irgendein Objekt", verwenden Sie stattdessen den instanceof-Operator — is_object() teilt Ihnen nur mit, dass der Wert irgendein Objekt ist.

Fazit

is_object() beantwortet eine einzige Frage: Ist dieser Wert ein Objekt? Verwenden Sie es, um Methoden- und Eigenschaftszugriffe gegen die fatalen Fehler abzusichern, die beim Aufrufen von Methoden auf strings, arrays oder null auftreten. Behalten Sie die Überraschungen im Kopf — Casts zu (object), json_decode()-Ergebnisse und Closures sind alles Objekte, während arrays und null es nicht sind. Für typspezifische Arbeit greifen Sie auf instanceof zurück; für einen lesbaren Typnamen greifen Sie auf gettype() zurück.

Übungen

Übung
Was ist die Funktion von is_object() in PHP?
Was ist die Funktion von is_object() in PHP?
Was this page helpful?