PHP 개체를 JSON으로 직렬화하는 것은 일반적으로 웹을 통해 데이터를 전송하는 데 사용됩니다. 그러나 PHP < 5.4에서는 새로운 JsonSerialized 인터페이스를 사용할 수 없기 때문에 문제가 발생합니다.
PHP에서 객체를 JSON으로 변환 < 5.4
이전 버전의 PHP의 경우 한 가지 접근 방식은 개체를 인코딩하기 전에 반복적으로 배열로 줄이는 것입니다. 제공된 예제에서 볼 수 있듯이 array_walk_recursive()를 사용하여 이 작업을 수행할 수 있습니다.
<code class="php">function toArray($object) { $array = (array) $object; array_walk_recursive($array, function (&$property) { if ($property instanceof Mf_Data) { $property = $property->toArray(); } }); return $array; }</p> <p>그러나 객체에 상위 항목에 대한 참조가 있으면 이 방법이 실패하여 재귀 오류가 발생합니다. 상위 참조를 제거하면 이 문제가 해결됩니다.</p> <p><strong>최종 배열 변환 솔루션</strong></p> <p>toArray 함수의 향상된 버전이 개발되었습니다.</p> <pre class="brush:php;toolbar:false"><code class="php">function toArray($object) { $array = get_object_vars($object); 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>
이것은 구현에서는 get_object_vars()를 사용하여 _parent 및 _index 속성을 제외한 객체의 속성을 얻습니다.
클리너 코드용 인터페이스 사용
더 깔끔한 솔루션은 객체 확인을 위해 인터페이스를 사용하는 것입니다. 유형:
<code class="php">interface ToMapInterface { function toMap(); function getToMapProperties(); } class Node implements ToMapInterface { function toMap() { $array = $this->getToMapProperties(); array_walk_recursive($array, function (&$value) { if ($value instanceof ToMapInterface) { $value = $value->toMap(); } }); return $array; } function getToMapProperties() { return array_diff_key(get_object_vars($this), array_flip(['index', 'parent'])); } }</code>
이 접근 방식은 JSON 직렬화를 위해 복잡한 객체를 배열로 변환하는 모듈식의 확장 가능한 방법을 제공합니다. 또한 불필요한 속성 복사나 깨지기 쉬운 method_exists() 검사가 필요하지 않습니다.
위 내용은 PHP 5.4 이전 버전에서 PHP 객체를 JSON으로 직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!