php 에서 직렬 화 및 json 사용 안내

5355 단어 서열 화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 인 코딩 에 사용 할 수 있 는 데이터 다.

좋은 웹페이지 즐겨찾기