현재 위치: > 최신 기사 목록> Jsonserializable :: Jsonserialize PHP 익명 클래스, 데이터 출력을 우아하게 단순화하는 방법은 무엇입니까?

Jsonserializable :: Jsonserialize PHP 익명 클래스, 데이터 출력을 우아하게 단순화하는 방법은 무엇입니까?

gitbox 2025-06-11

시나리오 문제

다음 시나리오를 고려하십시오. ID, 이름, 이메일, 비밀번호 해시, 등록 시간 등과 같은 많은 필드가 포함 된 사용자 모델 $ 사용자 가 있습니다. 외부 세계에 인터페이스를 제공 할 때 ID 및 이름과 같은 필드의 일부만 반환 할 수 있으며 스 플라이 싱 URL 또는 포맷과 같은 특정 필드를 처리해야 할 수도 있습니다. 모델 자체의 논리를 오염시키는 것을 피하기 위해 동시에 코드는 간결하고 명확하며 익명의 클래스는 편리합니다.


익명 클래스 + jsonserializable : 출력을 더 우아하게 만듭니다

다음은 익명 클래스 및 jsonserializable 구현을 사용하는 예입니다.

<코드> <? php

$ user = (Object) [
'ID'=> 101,
'이름'=> 'Alice',
'아바타'=> 'avatar101.jpg',
];

함수 발표자 (Object $ user) : jsonserializable {
새로운 클래스 ($ user)를 반환합니다 jsonserializable {
개인 객체 $ user;

     public function __construct(object $user) {
        $this->user = $user;
    }

    public function jsonSerialize(): array {
        return [
            'id' => $this->user->id,
            'name' => $this->user->name,
            'avatar_url' => 'https://gitbox.net/uploads/avatars/' . $this->user->avatar,
        ];
    }
};

}

헤더 ( 'content-type : application/json');
echo json_encode (presentUser ($ user), json_pretty_print);
</코드>


코드 하이라이트 해체

  1. 익명의 클래스는 맥락에 밀접한 관련이 있습니다 <br> 익명 클래스는이 용도에만 존재하는 생성자를 통해 $ 사용자 객체를 캡처하여 클래스 정의의 중복성을 줄입니다.

  2. Jsonserializable 인터페이스는 구조적 출력 <br>를 보장합니다 이 인터페이스를 사용하면 직렬화 로직을 사용자 정의하고 객체를 배열 출력으로 변환 할 수 있습니다. 이는 전통적인 getArraycopy () 또는 수동 어레이 구성보다 우아합니다.

  3. 캡슐화 서식 논리 <br> 예를 들어, Avatar_url 필드의 스 플라이 싱 논리는 익명 클래스 내부에 깨끗하게 래핑되어 컨트롤러 또는 뷰 레이어의 처리 세부 사항을 피합니다.


전통적인 방법과 비교

전통적인 방법은 다음과 같이 쓰여질 수 있습니다.

<code> echo json_encode ([ 'id'=> $ user-> id, 'name'=> $ user-> name, 'avatar_url'=> 'https://gitbox.net/uploads/avatars/'. $ user-> avatar,]; </코드>

코드 줄의 수는 비슷하지만 출력 필드가 많고 논리가 복잡한 경우 익명 클래스는 더 구조화되고 다중 잠재력을 가질 것입니다. 특히 익명 클래스는 일반 발표자 계층을 형성하기 위해 기능으로 추상적으로 캡슐화 될 수 있습니다.


사용 권장 사항

  • 익명 클래스 + jsonserializable은 임시 데이터 캡슐화 및 소규모 출력 사용에 이상적인 조합입니다.

  • 프로젝트에 많은 DTO 요구 사항이있는 경우 특수 클래스 또는 자동화 도구 (Symfony Serializer, Laravel Resource)를 사용하는 것을 고려하십시오.

  • 익명의 수업은 남용을 피하십시오 : 익명의 수업은 유연하지만 복잡한 행동이 있거나 재사용 해야하는 논리를 다루는 데 적합하지 않습니다.