在 PHP 5.4 之前将 PHP 对象转换为 JSON
虽然 PHP 5.4 引入了方便的 JsonSerialized 接口来简化对象到 JSON 的转换,但这个该选项不适用于 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中文网其他相关文章!