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

PHP 객체 직렬화 완벽 가이드: serialize()와 unserialize() 활용법


PHP 객체 직렬화란?

PHP에서 serialize() 함수는 객체를 바이트 스트림(byte-stream) 형태의 문자열로 변환해 줍니다. 이 문자열에는 객체의 모든 속성(property) 변수가 포함되며, 메서드(method)는 저장되지 않습니다. 생성된 문자열은 파일 등 어디에든 저장할 수 있어 객체 데이터를 영구 보관하거나 전송하는 데 유용합니다.

반대로 저장된 바이트 스트림에서 원래 객체를 복원하려면 unserialize() 함수를 사용합니다. 단, 이 함수를 호출하기 전에 반드시 해당 클래스의 정의가 먼저 선언되어 있어야 한다는 점에 유의해야 합니다.

객체 직렬화 예제

먼저 아래 클래스의 객체를 직렬화하여 문자열 형태로 파일에 저장해 보겠습니다.

<?php
class test1{
    private $name;
    function __construct($arg){
        $this->name=$arg;
    }
}
$obj1=new test1("Kiran");
$str=serialize($obj1);
$fd=fopen("obj.txt","w");
fwrite($fd, $str);
fclose($fd);
?>

위 코드를 실행하면 현재 폴더에 obj.txt 파일이 생성되고, 그 안에 직렬화된 객체 문자열이 저장됩니다.

역직렬화(Unserialize) 예제

이제 파일에서 바이트 스트림을 읽어 들여 원래 객체로 복원하는 코드를 살펴보겠습니다.

<?php
class test1{
    private $name;
    function __construct($arg){
        $this->name=$arg;
    }
    function getname(){
        return $this->name;
    }
}
$filename="obj.txt";
$fd=fopen("obj.txt","r");
$str=fread($fd, filesize($filename));
$obj=unserialize($str);
echo "name: " . $obj->getname();
?>

주의할 점은 역직렬화 시 test1 클래스의 정의가 스크립트 내에 포함되어 있어야 한다는 것입니다. 클래스 정의가 없으면 unserialize()__PHP_Incomplete_Class 객체를 반환하여 속성과 메서드에 정상적으로 접근할 수 없습니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

name: Kiran