在PHP 5.4 之前將PHP 物件轉換為JSON
雖然PHP 5.4 引入了方便的JsonSerialized 接口來,但這個選項不適用於5.4 以下的PHP 版本。要在早期版本中實現類似的功能,請考慮以下方法:
方法1:類型轉換和數組轉換
對於簡單對象,將對象類型轉換為陣列接著對結果陣列進行編碼即可:
<code class="php">$json = json_encode((array)$object);</code>
方法2:遞迴toArray 方法
在物件類別中建立一個toArray() 方法以遞歸地轉換其屬性到數組。如果屬性本身就是對象,也可以遞歸地呼叫它們的toArray() :
<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>
透過從數組中刪除循環引用(例如_parent),您可以避免與遞歸相關的問題:
<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>
方法3:基於介面的轉換
定義一個介面(例如ToMapInterface),其中包含將物件轉換為陣列的方法(toMap()) 並取得要包含在轉換中的屬性子集(getToMapProperties()):
<code class="php">interface ToMapInterface { function toMap(); function getToMapProperties(); }</code>
在Node 類別中,實作這些方法以建立更結構化且可測試的轉換過程:
<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>
以上是PHP 5.4 之前如何將 PHP 物件轉換為 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!