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

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

Patricia Arquette
Patricia Arquetteasal
2024-12-21 19:25:211022semak imbas

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

Bagaimanakah saya boleh mengakses sifat objek dengan nama seperti integer atau nama sifat tidak sah?

Penyahkodan JSON dalam PHP selalunya menghasilkan objek dengan sifat yang mempunyai nama yang tidak sah. Ketidakkonsistenan ini menyukarkan untuk mengakses sifat ini menggunakan sintaks objek standard.

Mengakses Sifat dengan Nama Sah

Sifat dengan nama pembolehubah yang sah boleh diakses menggunakan titik tatatanda:

$data = '{ "name": "John Doe" }';
$obj = json_decode($data);
echo $obj->name; // Output: John Doe

Mengakses Sifat dengan Nama Tidak Sah

Mengakses sifat dengan integer atau nama tidak sah lain bukanlah semudah itu. PHP mempunyai beberapa ciri yang boleh menyebabkan ralat:

  • PHP 7.2 dan kemudiannya membenarkan mengakses sifat berangka menggunakan sintaks pendakap kerinting:
$data = '{ "42": "The Answer" }';
$obj = json_decode($data);
echo $obj->{'42'}; // Output: The Answer
  • Walau bagaimanapun, untuk nama sifat semua angka, sintaks ini masih gagal:
$data = '{ "123": "Three Digits" }';
$obj = json_decode($data);
echo $obj->{'123'}; // Error: syntax error
  • Pengecualian kepada peraturan di atas berlaku apabila objek tidak diterbitkan daripada tatasusunan:
$obj = new stdClass;
$obj->{'123'} = 'Three Digits';
echo $obj->{'123'}; // Output: Three Digits

Praktikal Penyelesaian

Untuk mengakses hartanah dengan nama yang tidak sah, pertimbangkan ini pilihan:

  • Hantar ke Tatasusunan Secara Manual:
$obj = json_decode($data);
$arr = (array) $obj->highlighting;
$value = $arr['448364']['Data']['0'];
  • Pemutus Tatasusunan Rekursif:
function recursive_cast_to_array($obj) {
    $arr = (array) $obj;
    foreach ($arr as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }
    return $arr;
}

$arr = recursive_cast_to_array($obj);
$value = $arr['highlighting']['448364']['Data']['0'];
  • Gunakan JSON Fungsi:
$arr = json_decode(json_encode($obj), true);
$value = $arr['highlighting']['448364']['Data']['0'];

Perhatikan bahawa fungsi JSON memerlukan pengekodan UTF-8 untuk semua rentetan.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Sifat Objek dengan Nama Tidak Sah atau Integer 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