Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mengakses Sifat Objek dengan Nama Angka atau Tidak Sah dalam PHP?

Bagaimana untuk Mengakses Sifat Objek dengan Nama Angka atau Tidak Sah dalam PHP?

Susan Sarandon
Susan Sarandonasal
2024-12-25 19:19:10262semak imbas

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

Mengakses Sifat Objek dengan Nama Berangka atau Tidak Sah dalam PHP

Apabila bekerja dengan data JSON dalam PHP, ada kemungkinan untuk menemui objek dengan sifat dinamakan sebagai integer atau tidak sah nama berubah-ubah. Ini boleh menyebabkan kesukaran mengakses sifat ini menggunakan notasi titik standard.

Ralat Sintaks dengan Kekunci Angka

Pertimbangkan contoh berikut, apabila objek JSON dinyahkod menggunakan json_decode():

$myVar = json_decode($data);

Ini mungkin menghasilkan objek seperti:

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

Percubaan untuk mengakses nilai rentetan dalam kekunci [0] menggunakan tatatanda titik, seperti yang ditunjukkan di bawah, akan mengakibatkan ralat sintaks:

print $myVar->highlighting->448364->Data->0;

Apakah Isunya?

PHP tidak boleh mengakses terus sifat objek dengan nama angka kerana ia dianggap sebagai nama pembolehubah tidak sah. Isu ini timbul disebabkan oleh cara PHP menghuraikan pengakses harta benda.

Penyelesaian Kemungkinan

Pilihan 1: Penghantaran Manual

Untuk mengakses harta itu, anda boleh menukar objek secara manual kepada tatasusunan menggunakan (tatasusunan)$objek. Ini membolehkan anda mengakses sifat berangka sebagai kunci tatasusunan:

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

Pilihan 2: Sintaks Dakap Kerinting

Kaedah alternatif ialah menggunakan sintaks pendakap kerinting untuk mengakses harta itu. Walau bagaimanapun, ini hanya berfungsi jika nama sifat bukan angka sepenuhnya:

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

Pilihan 3: Fungsi Casting Rekursif

Pendekatan yang lebih mantap ialah mencipta adat fungsi yang secara rekursif menukarkan objek kepada tatasusunan:

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'];

Pilihan 4: Menggunakan Fungsi JSON

Pilihan lain ialah menggunakan fungsi JSON terbina dalam untuk menukar objek secara rekursif kepada tatasusunan:

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

Pendekatan ini mudah tetapi memerlukan data untuk UTF-8 dikodkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Sifat Objek dengan Nama Angka atau Tidak Sah dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn