Signatur
Beschreibung
runkit7_zval_inspect() ist Teil der Runkit7-Erweiterung und ermöglicht einen tiefen Blick in die interne Struktur eines PHP-Wertes (sogenannte zval-Struktur). Sie gibt unter anderem den internen Datentyp, den Referenzzähler (refcount) sowie den is_ref-Status zurück.
Diese Funktion ist vor allem für Debugging, Profiling und das tiefe Verständnis der PHP-Speicherverwaltung nützlich. Mit ihr lässt sich beobachten, wie PHP Werte intern verwaltet, insbesondere beim Copy-on-Write-Mechanismus und bei der Übergabe von Variablen als Referenz.
Die Funktion ist nicht für den Produktionseinsatz gedacht, da sie implementierungsspezifische Details offenbart, die sich zwischen PHP-Versionen unterscheiden können. Sie eignet sich hervorragend für Lernzwecke oder zur Diagnose von Speicherlecks in komplexen Anwendungen.
Beachte, dass Runkit7 eine PECL-Erweiterung ist und separat installiert werden muss. Die zurückgegebene Array-Struktur kann je nach PHP-Version und Runkit7-Version variieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value Pflicht | mixed | Der zu untersuchende Wert. Kann ein beliebiger PHP-Wert sein: Skalar, Array, Objekt, Ressource usw. |
Rückgabewert
type (interner Typname, z. B. string, long, double), refcount (aktueller Referenzzähler des zval) und is_ref (ob der Wert als PHP-Referenz markiert ist, als bool).Beispiele
Basisinspektion eines Integers
<?php
// Voraussetzung: Runkit7-Erweiterung ist geladen
$zahl = 42;
$info = runkit7_zval_inspect($zahl);
print_r($info);
// Gibt Typ, Referenzzähler und is_ref-Status aus
Vergleich von Referenz vs. Kopie
<?php
// Voraussetzung: Runkit7-Erweiterung ist geladen
$a = 'Hallo';
$b = $a; // Copy-on-Write: zval wird geteilt
$c = &$a; // Echte Referenz
echo "Ohne Referenz (\$a nach \$b = \$a):\n";
print_r(runkit7_zval_inspect($a));
echo "\nMit Referenz (\$a nach \$c = &\$a):\n";
print_r(runkit7_zval_inspect($c));
// Wichtig · Fallstricke
Achtung: Da runkit7_zval_inspect() den Wert als Argument übergibt, erhöht der Funktionsaufruf selbst den Referenzzähler vorübergehend. Der ausgegebene refcount-Wert ist daher um mindestens 1 höher als der tatsächliche Zähler im umgebenden Code — dies ist ein bekanntes und unvermeidbares Verhalten.
Die Funktion steht nur zur Verfügung, wenn die Runkit7-Erweiterung über PECL installiert und in der php.ini aktiviert ist. Sie sollte niemals in Produktionsumgebungen verwendet werden, da interne Implementierungsdetails offenbart werden, die sich ohne Vorwarnung ändern können.
Die Bedeutung und Semantik von refcount hat sich in PHP 7 grundlegend geändert (Abschaffung von is_ref für skalare Typen in vielen Fällen). Die Ausgabe kann daher je nach PHP-Version unterschiedlich interpretiert werden.