서론
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 인터페이스를 활용하는 것이 좋습니다.