Start · Sprachen · PHP · Referenz · get_debug_type

get_debug_type

Funktion

Gibt den Typnamen einer Variable als lesbaren String zurück – ideal für Fehlermeldungen und Debugging.

seit PHP 8.0.0 Kategorie: type

Signatur

get_debug_type(mixed $value): string

Beschreibung

get_debug_type() liefert den Typ einer beliebigen Variable als aussagekräftigen String. Im Gegensatz zu gettype() werden dabei für Objekte der vollqualifizierte Klassenname (inkl. Namespace) zurückgegeben, und für anonyme Klassen ein beschreibender Bezeichner.

Für skalare Typen und bekannte Strukturen verwendet die Funktion die in PHP 8 eingeführten nativen Typnamen: int, float, bool, string, null, array und resource. Das unterscheidet sie deutlich von gettype(), das z. B. integer statt int zurückgibt.

Besonders nützlich ist get_debug_type() beim Werfen von Typfehlern in eigenen Bibliotheken oder Frameworks: Man kann präzise benennen, was tatsächlich übergeben wurde, ohne selbst zwischen Objekt, Primitivtyp und anonymer Klasse unterscheiden zu müssen.

Für anonyme Klassen wird ein String nach dem Muster class@anonymous mit Datei- und Zeilenangabe zurückgegeben, was die Fehlersuche erheblich vereinfacht.

Parameter

Name Typ Default Beschreibung
$value Pflicht mixed Die Variable, deren Typ ermittelt werden soll. Akzeptiert jeden PHP-Typ.

Rückgabewert

Typ
string
Beschreibung
Gibt den Typnamen zurück. Für Objekte den vollqualifizierten Klassennamen, für anonyme Klassen einen beschreibenden String, für skalare Typen und null die nativen PHP 8-Typnamen (int, float, bool, string, null, array, resource).

Beispiele

Grundlegende Typermittlung verschiedener Werte

<?php
var_dump(get_debug_type(42));          // int
var_dump(get_debug_type(3.14));        // float
var_dump(get_debug_type(true));        // bool
var_dump(get_debug_type('Hallo'));     // string
var_dump(get_debug_type(null));        // null
var_dump(get_debug_type([1, 2, 3]));   // array

$fp = fopen('php://temp', 'r');
var_dump(get_debug_type($fp));         // resource (stream)
fclose($fp);
string(3) "int" string(5) "float" string(4) "bool" string(6) "string" string(4) "null" string(5) "array" string(17) "resource (stream)"

Objekte und anonyme Klassen in Fehlermeldungen

<?php
namespace App\Http;

class Request {}

function verarbeiteRequest(mixed $input): void {
    if (!$input instanceof Request) {
        throw new \InvalidArgumentException(
            'Erwartet: App\\Http\\Request, erhalten: ' . get_debug_type($input)
        );
    }
    echo "Request verarbeitet.";
}

// Bekannte Klasse
$request = new Request();
echo get_debug_type($request) . "\n"; // App\Http\Request

// Anonyme Klasse
$anon = new class {};
echo get_debug_type($anon) . "\n";   // class@anonymous /path/to/file.php:20$0

// Typfehler-Beispiel
try {
    verarbeiteRequest('kein-request');
} catch (\InvalidArgumentException $e) {
    echo $e->getMessage();
}
App\Http\Request class@anonymous /path/to/file.php:20$0 Erwartet: App\Http\Request, erhalten: string

// Wichtig · Fallstricke

Unterschied zu gettype(): gettype() gibt veraltete Bezeichnungen zurück (z. B. integer, double, NULL), während get_debug_type() die modernen PHP-Typnamen verwendet und damit besser zu Typdeklarationen und Fehlermeldungen passt.

Nicht für Typprüfungen verwenden: Die Funktion ist ausschließlich für Debugging und Fehlermeldungen gedacht. Für echte Typprüfungen sollte man instanceof, is_int(), is_string() usw. bevorzugen, da diese verlässlicher und performanter sind.

Anonyme Klassen: Der zurückgegebene String für anonyme Klassen enthält Dateiname und Zeilennummer und kann sich zwischen PHP-Versionen ändern – nicht für programmatische Vergleiche geeignet.