>  기사  >  백엔드 개발  >  PHP 5.4 이전 버전에서 PHP 객체를 JSON으로 직렬화하는 방법은 무엇입니까?

PHP 5.4 이전 버전에서 PHP 객체를 JSON으로 직렬화하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-28 04:34:31425검색

How to Serialize PHP Objects to JSON in Versions Prior to PHP 5.4?

PHP 개체를 JSON으로 직렬화

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.