php 에서 직렬 화 및 json 사용 안내
직렬 화 는 대상 상 태 를 유지 하거나 전송 가능 한 형식 으로 바 꾸 는 과정 이다.직렬 화 와 상대 적 으로 반 직렬 화 는 흐름 을 대상 으로 전환한다.이 두 과정 을 결합 하면 데 이 터 를 쉽게 저장 하고 전송 할 수 있다.
대상 의 상태 정 보 를 저장 하거나 전송 할 수 있 는 창 으로 변환 하 는 과정.직렬 화 기간 에 대상 은 현재 상 태 를 임시 또는 영구적 저장 소 에 기록 합 니 다.이후 저장 소 에서 읽 거나 반 직렬 화 대상 의 상 태 를 통 해 이 대상 을 다시 만 들 수 있 습 니 다.
일반적으로 대상 인 스 턴 스 의 모든 필드 가 직렬 화 되 는데 이것 은 데이터 가 인 스 턴 스 의 직렬 화 데이터 로 표시 된다 는 것 을 의미한다.이 형식 을 설명 할 수 있 는 코드 는 이 데이터 의 값 을 확인 할 수 있 으 며,이 구성원 의 접근 성에 의존 하지 않 을 수 있 습 니 다.이와 유사 하 게 반 직렬 화 는 직렬 화 된 표현 형식 에서 데 이 터 를 추출 하고 대상 상 태 를 직접 설정 하 는 것 도 접근 가능 한 규칙 과 무관 하 다.중요 한 보안 데 이 터 를 포함 할 수 있 는 모든 대상 에 대해 가능 하 다 면 이 대상 을 직렬 화 할 수 없 게 해 야 한다.직렬 화 할 수 있 는 중요 한 데 이 터 를 저장 하기 위해 특정 필드 를 만들어 보 세 요.이 를 실현 할 수 없다 면 이 데 이 터 는 직렬 화 권한 을 가 진 코드 에 공개 되 고 악성 코드 가 이 권한 을 얻 지 않도록 해 야 한다.
[JSON 의 개념]
JSON,JavaScript Object Notation 은 인터페이스(AJAX,REST 등)데이터 교환 에 더욱 가 볍 고 우호 적 인 형식 입 니 다.JSON 은 구조 화 된 데이터 직렬 화 된 텍스트 형식 으로 XML 의 대체 품 으로 클 라 이언 트 와 서버 간 데이터 교환 에 효과 적 인 부하 형식 을 나타 낸다.그것 은 ECMAScript 언어 표준 에서 파생 된 것 이다.JSON 의 디자인 목 표 는 그것 을 작고 가 볍 고 텍스트 로 만 드 는 것 이 며 자바 스 크 립 트 의 서브 집합 이다.
[길이 비교]
다음 코드 는 배열 과 대상 인 코딩 후 생 성 된 문자열 과 길 이 를 보 여 줍 니 다.
class Foo {
public $int = 1;
public $bool = TRUE;
public $array = array(array(1), 2 => 'test', 'string');
public function test($flag) {
echo $flag, 'test function for Foo <br />';
}
public static function output($str) {
echo $str, '<br />';
}
public static function compare_serialize_and_json($data) {
$serialize_str = serialize($data);
self::output(' :' . $serialize_str . "; length=" .
strlen($serialize_str));
$json_str = json_encode($data);
self::output('JSON :' . $json_str . "; length=" . strlen($json_str));
}
}
$test_data = array('wwww' => 0, 'phppan' => 1, 'com' => 2);
//
echo ' :<br />';
Foo::compare_serialize_and_json($test_data);
$foo = new Foo();
echo ' :<br />';
Foo::compare_serialize_and_json($foo);
출력:
:
:a:3:{s:4:"wwww";i:0;s:6:"phppan";i:1;s:3:"com";i:2;}; length=52
JSON :{"wwww":0,"phppan":1,"com":2}; length=29
:
:O:3:"Foo":3:{s:3:"int";i:1;s:4:"bool";b:1;s:5:"array";a:3:{i:0;
a:1:{i:0;i:1;}i:2;s:4:"test";i:3;s:6:"string";}}; length=111
JSON :{"int":1,"bool":true,"array":{"0":[1],"2":"test","3":"string"}}; length=63
뚜렷 한 길이 차이 가 있 습 니 다.serialize 는 인 코딩 후 제 이 슨 의 두 배 정도 됩 니 다.원인:
•serialize 후 문자열 은 하위 문자열 의 길 이 를 포함 하고 있 습 니 다.이것 은 속도 적 최적화 일 수 있 습 니 다.전형 적 인 공간 교환 시간 이지 만 그 자체 가 너무 무 겁 습 니 다.serialize 는 더욱 상세 한 유형 구분 이 있 고 json 은 네 가지 유형 만 있 으 며 간단 한 기호 로 표시 합 니 다.
[속도 비교]
코드 로 문 제 를 설명 합 니 다.다음 과 같은 속도 의 코드 입 니 다.
$max_index = 10;
ini_set("memory_limit","512M");
$array = array_fill(0, 1000000, rand(1, 9999));
echo 'serialize:<br />';
$start = xdebug_time_index();
for ($i = 0; $i < $max_index; $i++) {
$str = serialize($array);
}
$end = xdebug_time_index();
echo $end - $start, '<br />';
echo 'json:<br />';
$start = xdebug_time_index();
for ($i = 0; $i < $max_index; $i++) {
$str = json_encode($array);
}
$end = xdebug_time_index();
echo $end - $start, '<br />';
unset($array, $str);
출력:
serialize:
9.5371007919312
json:
1.4313209056854
serialize 의 속 도 는 빅 데이터 의 경우 json 보다 한 단계 빠르다.위의 두 가 지 를 보면 제 이 슨 은 속도 나 생 성 된 문자열 의 크기 가 serialize 보다 좋 습 니 다.그런데 왜 serialize 가 존재 합 니까?원인 은 다음 과 같다.실현 의 기능 이다.
【처리 대상】
다음 코드:
header("Content-type:text/html;charset=utf8");
class Foo {
public function test($flag) {
echo $flag, 'test function for Foo <br />';
}
}
$foo = new Foo();
echo ' :<br />';
$foo->test(1);
$serialize_str = serialize($foo);
$obj = unserialize($serialize_str);
$obj->test(2);
$foo->test(1);
$json_str = json_encode($foo);
$obj = json_decode($json_str);
$obj->test(2);
die();
출력:
:
1test function for Foo
2test function for Foo
1test function for Foo
( ! ) Fatal error: Call to undefined method stdClass::test()
제 이 슨 은 대상 방법 등 데 이 터 를 처리 할 수 없습니다.【사용 범위】
•직렬 화 는 serialize,특히 대상 의 저장 소 를 사용 합 니 다.이것 은 그 존재의 의미 이다.대상 과 무관 한 데이터 저장 소 는 json 을 사용 할 수 있 습 니 다.예 를 들 어 대량의 숫자 를 포함 한 배열 등 입 니 다.다만 이런 상황 에 직면 했 을 때 우리 가 해 야 할 일 은 데이터 베 이 스 를 재 구성 하 는 것 일 수도 있다.데이터 교환 시 JSON 을 사용 하 는 것 도 그 정의 입 니 다.현재 JSON 은 UTF-8 인 코딩 에 사용 할 수 있 는 데이터 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
확장-JsonFileJson 형식은 사물을 정의하는 놀라운 방법이므로 개발자는 엔티티를 설명하기 위해 코드 저장소에 Json 형식을 자주 사용합니다. Devops는 또한 json 파일을 사용하여 애플리케이션 또는 기타 항목을 구성합니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.