직렬화는 변수를 저장하거나 전송할 수 있는 문자열로 변환하는 과정입니다. 역직렬화는 적절한 시점에 이 문자열을 원래 변수로 변환하는 것입니다. 이 두 프로세스가 결합되어 데이터를 쉽게 저장하고 전송하므로 프로그램의 유지 관리가 더욱 쉬워집니다. PHP의 다양한 직렬화를 비교해 보겠습니다.
서문
직렬화는 객체상태를 지속 가능하거나 전송 가능한 형식 지정 프로세스로 변환하는 것입니다. . 직렬화의 반대는 스트림을 개체로 변환하는 역직렬화입니다. 이 두 프로세스가 결합되어 데이터를 쉽게 저장하고 전송할 수 있습니다.
객체의 상태정보를 저장하거나 전송할 수 있는 형태로 변환하는 과정. 직렬화 중에 객체는 현재 상태를 임시 또는 영구 저장소에 씁니다. 나중에 저장소에서 개체의 상태를 읽거나 역직렬화하여 개체를 다시 만들 수 있습니다.
일반적으로 객체 인스턴스의 모든 필드는 직렬화됩니다. 즉, 데이터가 인스턴스의 직렬화된 데이터로 표시됩니다. 이런 방식으로 형식을 해석할 수 있는 코드는 멤버의 접근성에 의존하지 않고 데이터 값을 결정할 수 있습니다. 마찬가지로 역직렬화는 직렬화된 표현에서 데이터를 추출하고 접근성 규칙에 관계없이 객체 상태를 직접 설정합니다. 중요한 안전 데이터를 포함할 수 있는 모든 개체는 가능하면 직렬화할 수 없도록 만들어야 합니다. 직렬화 가능해야 하는 경우 직렬화할 수 없는 중요한 데이터를 보유하는 특정 필드를 생성해 보십시오. 이것이 가능하지 않은 경우 데이터가 직렬화 권한이 있는 모든 코드에 노출된다는 점을 인식하고 악성 코드가 해당 권한을 얻지 못하도록 해야 합니다.
직렬화 및 역직렬화함수
이 두 가지는 PHP에서 데이터의 직렬화와 역직렬화입니다 자주 사용하는 기능. 유형과 구조를 잃지 않고 PHP 값을 저장하거나 전달하는 데 유리합니다.
<?php $a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $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 '<br /><br />'; //反序列化 $o = unserialize($s); print_r($o); //输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut ) ?>
역직렬화 후 배열 값에 큰따옴표, 작은따옴표, 콜론 등의 문자가 포함되어 있으면 문제가 발생할 수 있습니다. 이 문제를 극복하기 위한 깔끔한 방법은 base64_encode
과 base64_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_encode
및 json_decode
형식은 serialize
및 unserialize
형식보다 훨씬 빠릅니다.
(1) JSON
형식은 읽을 수 있습니다.
(2) JSON
의 형식은 serialize
의 반환된 데이터 결과보다 작습니다.
(3) JSON
포맷이 개방적이고 이식 가능합니다. 다른 언어도 사용할 수 있습니다.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = json_encode($a); echo $s; //输出结果:{"a":"Apple","b":"banana","c":"Coconut"} echo '<br /><br />'; //反序列化 $o = json_decode($s);
위 예에서 json_encode
출력 길이는 이전 예의 serialize
출력 길이보다 분명히 짧습니다. json_encode
는 객체를 직렬화할 수 없다는 점에 유의해야 합니다.
요약
위 내용은 PHP의 다양한 직렬화 요약 및 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!