Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah saya boleh menukar objek PHP kepada JSON sebelum PHP 5.4?
Menukar Objek PHP kepada JSON Sebelum PHP 5.4
Sementara PHP 5.4 memperkenalkan antara muka JsonSerializable yang mudah untuk memudahkan penukaran objek-ke-JSON, ini pilihan tidak tersedia untuk versi PHP di bawah 5.4. Untuk mencapai kefungsian serupa dalam versi terdahulu, pertimbangkan pendekatan berikut:
Kaedah 1: Taipkan Casting dan Array Casting
Untuk objek mudah, taipkan menghantar objek ke tatasusunan dan kemudian pengekodan tatasusunan yang terhasil boleh mencukupi:
<code class="php">$json = json_encode((array)$object);</code>
Kaedah 2: Kaedah Rekursif keArray
Buat kaedah toArray() dalam kelas objek anda untuk menukarnya secara rekursif sifat kepada tatasusunan. Jika sifat itu sendiri adalah objek, panggil secara rekursif toArray() padanya juga:
<code class="php">public function toArray() { $array = (array) $this; array_walk_recursive($array, function (&$property) { if ($property instanceof Mf_Data) { $property = $property->toArray(); } }); return $array; }</code>
Dengan mengalih keluar rujukan bulat (cth., _parent) daripada tatasusunan, anda boleh mengelakkan isu berkaitan rekursi:
<code class="php">public function toArray() { $array = get_object_vars($this); unset($array['_parent'], $array['_index']); array_walk_recursive($array, function (&$property) { if (is_object($property) && method_exists($property, 'toArray')) { $property = $property->toArray(); } }); return $array; }</code>
Kaedah 3: Penukaran Berasaskan Antara Muka
Tentukan antara muka (cth., ToMapInterface) yang merangkumi kaedah untuk menukar objek kepada tatasusunan (toMap()) dan mendapatkan subset sifat untuk disertakan dalam penukaran (getToMapProperties()):
<code class="php">interface ToMapInterface { function toMap(); function getToMapProperties(); }</code>
Dalam kelas Node anda, laksanakan kaedah ini untuk mencipta proses penukaran yang lebih berstruktur dan boleh diuji:
<code class="php">class Node implements ToMapInterface { public function toMap() { $array = $this->getToMapProperties(); array_walk_recursive($array, function (&$value) { if ($value instanceof ToMapInterface) { $value = $value->toMap(); } }); return $array; } public function getToMapProperties() { return array_diff_key(get_object_vars($this), array_flip(array( 'index', 'parent' ))); } }</code>
Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar objek PHP kepada JSON sebelum PHP 5.4?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!