Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP Serializable 인터페이스 완벽 가이드: 객체 커스텀 직렬화 구현하기

서론

Serializable 인터페이스는 PHP에서 사용자 정의 직렬화 로직을 제공하는 클래스를 작성할 수 있도록 지원하는 내장 인터페이스입니다. PHP의 serialize() 함수는 대부분의 값을 저장 가능한 문자열 표현으로 변환할 수 있지만, 기본적으로 사용자 정의 클래스의 객체는 직렬화할 수 없습니다. Serializable 인터페이스를 구현하면 객체의 직렬화 및 역직렬화 과정을 직접 제어할 수 있습니다.

문법

Serializable {
    /* 메서드 */
    abstract public serialize ( void ) : string
    abstract public unserialize ( string $serialized ) : void
}

메서드

Serializable::serialize — 객체의 문자열 표현을 반환합니다.

Serializable::unserialize — 직렬화된 문자열 표현으로부터 객체를 재구성합니다.

내장 serialize() 함수는 값의 저장 가능한 표현을 생성합니다.

serialize ( mixed $value ) : string

unserialize() 함수는 저장된 표현으로부터 PHP 값을 복원합니다.

unserialize ( string $str [, array $options ] ) : mixed

Serializable 예제

다음 예제에서 myclass는 private 프로퍼티로 문자열 변수를 가지고 있습니다. 내장 serialize() 함수에 이 클래스의 객체를 인자로 전달하면 serialize() 메서드가 자동으로 호출됩니다. 마찬가지로 unserialize() 함수는 직렬화된 문자열로부터 private 프로퍼티를 복원하여 객체를 재구성합니다.

예제 코드

<?php
class myclass implements Serializable {
    private $arr;
    public function __construct() {
        $this->arr = "TutorialsPoint India (p) Ltd";
    }
    public function serialize() {
        echo "Serializing object..\n";
        return serialize($this->arr);
    }
    public function unserialize($data) {
        echo "Unserializing object..\n";
        $this->arr = unserialize($data);
    }
    public function getdata() {
        return $this->arr;
    }
}
$obj = new myclass;
$serobj = serialize($obj);
var_dump ($serobj);
$obj1 = unserialize($serobj);
var_dump($obj1->getdata());
?>

실행 결과

위 프로그램은 다음과 같은 출력을 보여줍니다.

Serializing object..
string(55) "C:7:"myclass":36:{s:28:"TutorialsPoint India (p) Ltd";}"
Unserializing object..
string(28) "TutorialsPoint India (p) Ltd"

참고 사항

Serializable 인터페이스는 PHP 8.1부터 공식적으로 지원 중단(deprecated)되었습니다. 최신 PHP 버전에서는 __serialize()__unserialize() 매직 메서드를 사용하는 것이 권장됩니다. 새로운 프로젝트에서는 매직 메서드 방식을 사용하고, 기존 코드 유지보수 시에만 Serializable 인터페이스를 활용하는 것이 좋습니다.