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
truezurück, wenn$valueein Objekt ist,falsefür jeden anderen Typ (string, int, array,nullusw.).
Grundlegendes Beispiel
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_dumpund nichtecho? Wenn man einen boolean mitechoausgibt, wirdtrueals1angezeigt, aberfalseals leerer string — daher siehtecho 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
| Funktion | Prü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.