Signatur
Beschreibung
get_mangled_object_vars() liefert ein assoziatives Array aller Eigenschaften des übergebenen Objekts. Im Gegensatz zu get_object_vars() werden dabei die Eigenschaftsnamen nicht bereinigt, sondern so ausgegeben, wie PHP sie intern speichert – inklusive des sogenannten Name Manglings für private- und protected-Eigenschaften.
PHP kodiert den Sichtbarkeitsbereich einer Eigenschaft direkt in deren Namen: Eine private-Eigenschaft foo der Klasse Bar wird intern als \0Bar\0foo gespeichert (umgeben von Null-Bytes), eine protected-Eigenschaft als \0*\0foo. Diese Funktion gibt genau diese rohen Schlüssel zurück, was besonders beim Serialisieren, Debuggen oder beim Verarbeiten serialisierter Daten hilfreich ist.
Ein typischer Anwendungsfall ist die Analyse von deserialisierten Objekten oder das Abgleichen von Eigenschaftsnamen mit rohen Serialisierungsdaten. Auch beim Implementieren benutzerdefinierter Serialisierungsmechanismen kann es wichtig sein, den internen Eigenschaftsnamen zu kennen, um ihn korrekt zu reproduzieren.
Zu beachten ist, dass die Funktion – anders als get_object_vars() – nicht auf den Sichtbarkeitskontext des aufrufenden Codes reagiert: Sie gibt immer alle Eigenschaften zurück, unabhängig davon, ob sie öffentlich, geschützt oder privat sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object Pflicht | object | Das Objekt, dessen Eigenschaften abgerufen werden sollen. Es werden alle Eigenschaften zurückgegeben – public, protected und private. |
Rückgabewert
private-Eigenschaften enthält der Schlüssel Null-Bytes (\0KlassenName\0eigenschaftsname), bei protected-Eigenschaften \0*\0eigenschaftsname. Öffentliche Eigenschaften erscheinen ohne Präfix.Beispiele
Unterschied zwischen public, protected und private
<?php
class Fahrzeug
{
public string $marke = 'BMW';
protected int $baujahr = 2020;
private float $preis = 35000.00;
}
$auto = new Fahrzeug();
$vars = get_mangled_object_vars($auto);
foreach ($vars as $key => $value) {
// Null-Bytes sichtbar machen
$sichtbarer_key = str_replace("\0", '{NUL}', $key);
echo "$sichtbarer_key => $value\n";
}
Vergleich mit serialisierten Daten
<?php
class Konto
{
public string $inhaber = 'Max Mustermann';
protected float $saldo = 1500.50;
private string $iban = 'DE89370400440532013000';
}
$konto = new Konto();
// Rohe serialisierte Daten
$serialized = serialize($konto);
echo $serialized . "\n\n";
// Interne Eigenschaftsnamen über get_mangled_object_vars
$vars = get_mangled_object_vars($konto);
foreach ($vars as $key => $value) {
$anzeige = str_replace("\0", '{NUL}', $key);
echo "$anzeige => $value\n";
}