Heim > Backend-Entwicklung > PHP-Tutorial > Wie greife ich in PHP auf Objekteigenschaften mit numerischen oder ungültigen Namen zu?

Wie greife ich in PHP auf Objekteigenschaften mit numerischen oder ungültigen Namen zu?

Susan Sarandon
Freigeben: 2024-12-25 19:19:10
Original
261 Leute haben es durchsucht

How to Access Object Properties with Numeric or Invalid Names in PHP?

Zugriff auf Objekteigenschaften mit numerischen oder ungültigen Namen in PHP

Beim Arbeiten mit JSON-Daten in PHP ist es möglich, auf Objekte zu stoßen, deren Eigenschaften als Ganzzahlen oder ungültig benannt sind Variablennamen. Dies kann zu Schwierigkeiten beim Zugriff auf diese Eigenschaften mithilfe der Standardpunktnotation führen.

Syntaxfehler bei numerischen Tasten

Betrachten Sie das folgende Beispiel, in dem ein JSON-Objekt mit json_decode() dekodiert wird:

$myVar = json_decode($data);
Nach dem Login kopieren

Dies kann zu einem Objekt wie dem folgenden führen:

[highlighting] => stdClass Object
    (
        [448364] => stdClass Object
            (
                [Data] => Array
                    (
                        [0] => Tax amount liability is .......
                    )
            )
    )
Nach dem Login kopieren

Versuch, auf die Zeichenfolge zuzugreifen Wert im Schlüssel [0] mit Punktnotation, wie unten gezeigt, führt zu einem Syntaxfehler:

print $myVar->highlighting->448364->Data->0;
Nach dem Login kopieren

Was ist das Problem?

PHP kann nicht direkt auf Objekteigenschaften mit numerischen Namen zugreifen, weil Sie gelten als ungültige Variablennamen. Dieses Problem entsteht aufgrund der Art und Weise, wie PHP Eigenschaftszugriffsfunktionen analysiert.

Mögliche Lösungen

Option 1: Manuelles Casting

Um auf die Eigenschaft zuzugreifen, können Sie Folgendes tun: Konvertieren Sie das Objekt manuell mit (array)$object in ein Array. Dadurch können Sie auf die numerische Eigenschaft als Array-Schlüssel zugreifen:

$highlighting = (array)$myVar->highlighting;
$data = (array)$highlighting['448364']->Data;
$value = $data['0'];
Nach dem Login kopieren

Option 2: Syntax für geschweifte Klammern

Eine alternative Methode besteht darin, die Syntax für geschweifte Klammern zu verwenden Zugang zum Grundstück. Dies funktioniert jedoch nur, wenn der Eigenschaftsname nicht vollständig numerisch ist:

echo $myVar->highlighting->{'448364'}->Data->0; // OK!
echo $myVar->highlighting->{'123'}->Data->0; // Error!
Nach dem Login kopieren

Option 3: Rekursive Casting-Funktion

Ein robusterer Ansatz besteht darin, einen benutzerdefinierten Namen zu erstellen Funktion, die Objekte rekursiv in Arrays konvertiert:

function recursive_cast_to_array($o) {
    $a = (array)$o;
    foreach ($a as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }

    return $a;
}

$arr = recursive_cast_to_array($myVar);
$value = $arr['highlighting']['448364']['Data']['0'];
Nach dem Login kopieren

Option 4: Verwendung von JSON Funktionen

Eine weitere Option besteht darin, die integrierten JSON-Funktionen zu verwenden, um das Objekt rekursiv in ein Array zu konvertieren:

$arr = json_decode(json_encode($myVar), true);
$value = $arr['highlighting']['448364']['Data']['0'];
Nach dem Login kopieren

Dieser Ansatz ist praktisch, erfordert jedoch, dass die Daten UTF sind -8 codiert.

Das obige ist der detaillierte Inhalt vonWie greife ich in PHP auf Objekteigenschaften mit numerischen oder ungültigen Namen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage