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!