> 백엔드 개발 > PHP 튜토리얼 > PHP의 다양한 직렬화 요약 및 비교

PHP의 다양한 직렬화 요약 및 비교

黄舟
풀어 주다: 2023-03-07 07:26:01
원래의
1312명이 탐색했습니다.

직렬화는 변수를 저장하거나 전송할 수 있는 문자열로 변환하는 과정입니다. 역직렬화는 적절한 시점에 이 문자열을 원래 변수로 변환하는 것입니다. 이 두 프로세스가 결합되어 데이터를 쉽게 저장하고 전송하므로 프로그램의 유지 관리가 더욱 쉬워집니다. PHP의 다양한 직렬화를 비교해 보겠습니다.

서문

직렬화는 객체상태를 지속 가능하거나 전송 가능한 형식 지정 프로세스로 변환하는 것입니다. . 직렬화의 반대는 스트림을 개체로 변환하는 역직렬화입니다. 이 두 프로세스가 결합되어 데이터를 쉽게 저장하고 전송할 수 있습니다.

객체의 상태정보를 저장하거나 전송할 수 있는 형태로 변환하는 과정. 직렬화 중에 객체는 현재 상태를 임시 또는 영구 저장소에 씁니다. 나중에 저장소에서 개체의 상태를 읽거나 역직렬화하여 개체를 다시 만들 수 있습니다.

일반적으로 객체 인스턴스의 모든 필드는 직렬화됩니다. 즉, 데이터가 인스턴스의 직렬화된 데이터로 표시됩니다. 이런 방식으로 형식을 해석할 수 있는 코드는 멤버의 접근성에 의존하지 않고 데이터 값을 결정할 수 있습니다. 마찬가지로 역직렬화는 직렬화된 표현에서 데이터를 추출하고 접근성 규칙에 관계없이 객체 상태를 직접 설정합니다. 중요한 안전 데이터를 포함할 수 있는 모든 개체는 가능하면 직렬화할 수 없도록 만들어야 합니다. 직렬화 가능해야 하는 경우 직렬화할 수 없는 중요한 데이터를 보유하는 특정 필드를 생성해 보십시오. 이것이 가능하지 않은 경우 데이터가 직렬화 권한이 있는 모든 코드에 노출된다는 점을 인식하고 악성 코드가 해당 권한을 얻지 못하도록 해야 합니다.

직렬화 및 역직렬화함수

이 두 가지는 PHP에서 데이터의 직렬화와 역직렬화입니다 자주 사용하는 기능. 유형과 구조를 잃지 않고 PHP 값을 저장하거나 전달하는 데 유리합니다.

<?php

$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);

//序列化数组
$s = serialize($a);
echo $s;
//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}

echo &#39;<br /><br />&#39;;

//反序列化
$o = unserialize($s);

print_r($o);
//输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut )

?>
로그인 후 복사

역직렬화 후 배열 값에 큰따옴표, 작은따옴표, 콜론 등의 문자가 포함되어 있으면 문제가 발생할 수 있습니다. 이 문제를 극복하기 위한 깔끔한 방법은 base64_encodebase64_decode을 사용하는 것입니다.

$obj = array();
//序列化
$s = base64_encode(serialize($obj));
//反序列化
$original = unserialize(base64_decode($s));

但是base64编码将增加字符串的长度。为了克服这个问题,可以和gzcompress一起使用。

//定义一个用来序列化对象的函数

function my_serialize( $obj )
{
 return base64_encode(gzcompress(serialize($obj)));
}

//反序列化
function my_unserialize($txt)
{
 return unserialize(gzuncompress(base64_decode($txt)));
}
로그인 후 복사

json_encode 및 json_decode

JSON 형식 직렬화 및 역직렬화를 사용하는 것이 좋습니다.

다음을 사용하여 출력합니다. json_encodejson_decode 형식은 serializeunserialize 형식보다 훨씬 빠릅니다.

(1) JSON 형식은 읽을 수 있습니다.

(2) JSON의 형식은 serialize의 반환된 데이터 결과보다 작습니다.

(3) JSON포맷이 개방적이고 이식 가능합니다. 다른 언어도 사용할 수 있습니다.

$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
 
//序列化数组
$s = json_encode($a);
echo $s;
//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}
 
echo &#39;<br /><br />&#39;;
 
//反序列化
$o = json_decode($s);
로그인 후 복사

위 예에서 json_encode 출력 길이는 이전 예의 serialize 출력 길이보다 분명히 짧습니다. json_encode는 객체를 직렬화할 수 없다는 점에 유의해야 합니다.

요약

위 내용은 PHP의 다양한 직렬화 요약 및 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿