Start · Sprachen · PHP · Referenz · get_resource_id

get_resource_id

Funktion

Gibt die eindeutige ganzzahlige ID einer <code>resource</code>-Variable zurück.

seit PHP 8.0.0 Kategorie: type

Signatur

get_resource_id(resource $resource): int

Beschreibung

get_resource_id() extrahiert den internen numerischen Bezeichner, den PHP jeder geöffneten Ressource (z. B. Datei-Handle, Datenbankverbindung, Bild-Handle) automatisch zuweist. Die Funktion ist der typsichere Nachfolger des Cast-Ausdrucks (int) $resource und macht die Absicht des Codes deutlich lesbarer.

Eine typische Anwendung ist das Nachverfolgen oder Protokollieren von Ressourcen, das Deduplizieren von Verbindungen in einem Pool oder das Vergleichen, ob zwei Variablen dieselbe zugrundeliegende Ressource referenzieren. Da PHP Ressourcen intern einfach als Integer-Handle verwaltet, erlaubt diese Funktion direkten, performanten Zugriff auf diesen Wert ohne Typ-Umwandlung.

Die Funktion akzeptiert ausschließlich einen Wert vom Typ resource. Wird ein anderer Typ übergeben, wirft PHP einen TypeError. Das unterscheidet sie vom alten Cast-Muster, das stillschweigend einen falschen Wert liefern konnte.

Parameter

Name Typ Default Beschreibung
$resource Pflicht resource Eine gültige PHP-Ressource, z. B. ein Rückgabewert von fopen(), mysqli_connect() oder imagecreate().

Rückgabewert

Typ
int
Beschreibung
Die interne, positive ganzzahlige ID der Ressource. Die ID ist innerhalb eines Skript-Lebenszyklus eindeutig, kann aber nach dem Schließen einer Ressource von einer neuen Ressource wiederverwendet werden.

Beispiele

Ressource-ID einer geöffneten Datei ermitteln

<?php
$handle = fopen('/tmp/beispiel.txt', 'w');

$id = get_resource_id($handle);
echo "Ressource-ID: " . $id . PHP_EOL;

fclose($handle);
Ressource-ID: 5

Zwei Ressourcen auf Identität prüfen

<?php
$conn1 = fopen('/tmp/a.txt', 'w');
$conn2 = fopen('/tmp/b.txt', 'w');
$conn3 = $conn1; // Gleiche Ressource, nur eine weitere Referenz

echo "conn1 ID: " . get_resource_id($conn1) . PHP_EOL;
echo "conn2 ID: " . get_resource_id($conn2) . PHP_EOL;
echo "conn3 ID: " . get_resource_id($conn3) . PHP_EOL;

if (get_resource_id($conn1) === get_resource_id($conn3)) {
    echo "conn1 und conn3 zeigen auf dieselbe Ressource." . PHP_EOL;
}

fclose($conn1);
fclose($conn2);
conn1 ID: 5 conn2 ID: 6 conn3 ID: 5 conn1 und conn3 zeigen auf dieselbe Ressource.

Vergleich mit dem alten Cast-Ansatz

<?php
$handle = fopen('/tmp/test.txt', 'w');

// Alt (funktioniert, aber implizit und fehleranfällig):
$idAlt = (int) $handle;

// Neu (typsicher, wirft TypeError bei falschem Typ):
$idNeu = get_resource_id($handle);

echo "Alt: $idAlt, Neu: $idNeu" . PHP_EOL;

fclose($handle);
Alt: 5, Neu: 5

// Wichtig · Fallstricke

Wichtig: Ressource-IDs sind nicht dauerhaft stabil. Nach dem Schließen einer Ressource mit z. B. fclose() kann PHP dieselbe ID für eine neu geöffnete Ressource vergeben. IDs sollten daher niemals über den Lebenszyklus der Ressource hinaus gespeichert oder verglichen werden.

Ab PHP 8.0 ist get_resource_id() die empfohlene Methode. Der Cast (int) $resource ist zwar weiterhin möglich, aber schlechter lesbar und liefert bei versehentlichem Übergeben anderer Typen keine Fehlermeldung.