PHP 의 직렬 화 변수 와 직렬 화 대상
PHP 에서 직렬 화 처 리 된 함수 가 여러 개 있 습 니 다:serialize().이 함 수 는 모든 변수 값(자원 변 수 를 제외 하고)을 문자열 형식 으로 바 꾸 고 문자열 을 파일 에 저장 하거나 Session 으로 등록 할 수 있 습 니 다.이 함 수 는 curl 을 사용 하여 GET/POST 를 모 의 하여 변 화 량 을 전송 하여 RPC 효 과 를 얻 을 수 있 습 니 다.
직렬 화 된 변 수 를 PHP 의 원시 변수 값 으로 바 꾸 려 면 unserialize()함 수 를 사용 할 수 있 습 니 다.
변수 직렬 화
우 리 는 간단 한 예 를 들 어 직렬 화 와 그것 의 저장 형식 을 설명 한다.
정형:
$var = 23; echo serialize($var);
출력:
i:23;
부동 소수점:
$var = 1.23;
echo serialize($var);
출력:
d:1.229999999999999982236431605997495353221893310546875;
문자열:
$var = "This is a string"; echo serialize($var);$var="나 는 변수 다"; echo serialize($var);
출력:
s:16:"This is a string";s:8:"나 는 변수 다";
불 형:
$var = true; echo serialize($var); $var = false; echo serialize($var);
출력:
b:1; b:0;
위의 이러한 기본 유형 은 직렬 화 된 후의 상황 이 매우 명확 하 다.직렬 화 된 후의 저장 형식 은:
변수 형식:[변수 길이:]변수 값;
바로 첫 번 째 문 자 는 변수 유형 을 대표 합 니 다.두 번 째 문 자 는 분할 을 대표 합 니 다.변수 길 이 는 선택 할 수 있 습 니 다.바로 문자열 형식 에 있 습 니 다.다른 유형 은 없습니다.마지막 으로 변수 값 입 니 다.모든 직렬 화 된 값 은""입 니 다."마무리 로
예 를 들 어 우리 의 전체 숫자 23 직렬 화 다음 에 i:23 이 있 으 면 길이 가 없고 유형 과 변수 값 만 있 습 니 다.i 는 integer 를 대표 합 니 다.사칭 분할 을 통 해 뒤에 저 장 된 것 은 전체 값 23 입 니 다.부동 소수점 형(두 바이트 형)도 마찬가지 입 니 다.불 형 이 라면 유형 은 b(boolean)이 고 true 라면 직렬 화 된 값 은 1 이 며 false 라면 값 은 0 입 니 다.글자.
문자열 값 은 중간 에 저장 할 가치 가 있 습 니 다.문자열 의 길이 값 을 저장 합 니 다.예 를 들 어 문자열"This is a string"이 있 으 면 직렬 화 된 값 은 s:16:"This is a string"입 니 다.s 는 string 입 니 다.대표 적 인 유형 입 니 다.가운데 16 은 이 문자열 의 길이 입 니 다.중국어 라면 모든 중국 어 는 두 글자 로 저 장 됩 니 다.예 를 들 어 문자열'나 는 변수'입 니 다.생 성 된 직렬 화 값 은 s:8:'나 는 변수'입 니 다.8 글자 길이 입 니 다.
다음은 배열 변수 직렬 화 에 중점 을 두 겠 습 니 다.
배열 변수:
$var = array("abc", "def", "xyz", "123");echo serialize($var);
출력:
a:4:{i:0;s:3:"abc";i:1;s:3:"def";i:2;s:3:"xyz";i:3;s:3:"123";}
바로 나의 배열$var 직렬 화 된 문자열 값 입 니 다.우리 의$var 배열 은 4 개의 문자열 요 소 를 포함 하고 있 습 니 다.각각"abc","def","xyz","123"입 니 다.직렬 화 된 데 이 터 를 분석 해 보 겠 습 니 다.간편 하 게 보기 위해 직렬 화 된 데 이 터 를 배열 하 는 스타일 입 니 다.
a:4:{i:0;s:3:"abc";i:1;s:3:"def";i:2;s:3:"xyz";i:3;s:3:"123";}
이렇게 배열 하면 비교적 뚜렷 합 니 다.시작 하 는 문자열 을 보십시오.a:4:{...}먼저 첫 번 째 문 자 는 a 가 변수 유형 을 array(수조)형식 으로 저장 하고,두 번 째 4 는 수조 원소 의 개수 로 모두 4 개가 저 장 된 다음{}사이 의 수조 원소 의 내용 입 니 다.예 를 들 어 첫 번 째 배열 요소:i:0;s:3:"abc"; i 대 표 는 현재 배열 요소 의 색인 값 유형 이 정형 이 고 값 은 0 이 며 요소 값 의 유형 은 s(문자열 의)이 며 개 수 는 3 개 이 며 구체 적 인 값 은"abc"이 며 분점 이 끝나 고 아래 의 배열 요 소 는 순서대로 유추 합 니 다.
요소 색인 으로 문자열 을 사용 하 는 방법 을 다시 봅 시다.
$var = array("index1"=>"abc", "index2"=>"def", "index3"=>"xyz", "index4"=>"123");echo serialize($var);
출력:
a:4:{s:6:"index1";s:3:"abc";s:6:"index2";s:3:"def";s:6:"index3";s:3:"xyz";s:6:"index4";s:3:"123";}
배열 모양 으로 변 한 후:
a:4:{ s:6:"index1";s:3:"abc"; s:6:"index2";s:3:"def"; s:6:"index3";s:3:"xyz"; s:6:"index4";s:3:"123";}
사실은 위 와 큰 차이 가 없 지만 시작 한 색인 은 문자열 을 저장 하 는 형식 으로 바 뀌 었 다.예 를 들 어 첫 번 째 요소:s:6:"index 1";s:3:"abc";첫 번 째 항목 은 색인 값:s:6:"index 1"입 니 다.s 는 형식 이 고 6 은 색인 문자열 의 길이 이 며'index 1'은 색인 의 값 입 니 다.뒤의 s:3:"abc";바로 원소 값 입 니 다.이것 은 이해 하기 쉬 우 니 말 하지 않 겠 습 니 다.
위 에서 볼 때 우 리 는 기본 데이터 유형의 직렬 화 를 대체적으로 알 게 되 었 다.사실은 우 리 는 자신의 직렬 화 기능 을 구축 하거나 이런 측면 에서 자신의 직렬 화 프로그램 을 개발 하여 우리 의 변수 교환 에 편리 하도록 할 수 있다.
물론 이 기능 을 이용 하여 배열 이나 다른 변 수 를 문자열 로 직렬 화한 다음 에 curl 기능 을 통 해 GET/POST 기능 을 모 의 하여 사용자 가 동작 을 수행 하지 않 고 원 격 서버 에서 데 이 터 를 얻 을 수 있 는 기능 을 수행 할 수 있 습 니 다.
2.대상 서열 화
대상 의 직렬 화 역시 비교적 보편적 인 기능 으로 한 대상 을 직렬 화 한 후에 하나의 문자열 로 바 꾸 어 저장 하거나 전송 할 수 있다.
우 리 는 먼저 예 를 하나 보 자.
class TestClass{ var $a; var $b;
function TestClass() { $this->a = "This is a"; $this->b = "This is b"; }
function getA() { return $this->a; }
function getB() { return $this->b; }}
$obj = new TestClass;$str = serialize($obj);echo $str;
출력 결과:
O:9:"TestClass":2:{s:1:"a";s:9:"This is a";s:1:"b";s:9:"This is b";}
대상 이 직렬 화 된 문자열 을 분석 합 니 다.
O:9:"TestClass":2:{ s:1:"a";s:9:"This is a"; s:1:"b";s:9:"This is b";}
먼저 대상 자체 의 내용 을 살 펴 보 자.O:9:"TestClass":2:O 는 이것 이 하나의 대상 유형(object)이라는 것 을 설명 하고 9 는 대상 의 이름 으로 농 도 를 찾 았 으 며 2 는 이 대상 에 게 몇 가지 속성 이 있 음 을 나타 낸다.두 속성의 내용 을 보고 있 습 니 다:
s:1:"a";s:9:"This is a"; 사실은 배열 의 내용 과 비슷 하 다.첫 번 째 항목 은 s:1:"a"이다.속성 이름 을 설명 하 는 두 번 째 s:9:"This is a";속성 값 을 설명 합 니 다.뒤의 속성 이 유사 합 니 다.
먼저 대상 이 직렬 화 된 응용 프로그램 을 말 하고 아래 의 내용 은 PHP 매 뉴 얼 에 있 으 며 원문 이 변경 되 지 않 았 습 니 다.
serialize()는 PHP 에 저장 할 수 있 는 모든 값 을 포함 하 는 문자열 을 되 돌려 줍 니 다.unserialize()는 이 문자열 로 원시 변수 값 을 재 구성 할 수 있 습 니 다.대상 의 모든 변 수 를 직렬 화하 여 저장 할 수 있 습 니 다.대상 의 함 수 는 저장 되 지 않 고 클래스 의 이름 만 있 습 니 다.
unserialize()의 대상 을 정의 하려 면 이 대상 의 종 류 를 정의 해 야 합 니 다.즉,page1.phop 의 클래스 A 대상$a 를 정렬 하면 클래스 A 를 가리 키 는 문자열 을 얻 고 모든$a 의 변 수 를 포함 하 는 값 을 포함 합 니 다.페이지 2.php 에서 클래스 A 의 대상$a 를 정렬 하려 면 페이지 2.php 에 클래스 A 의 정의 가 있어 야 합 니 다.이것 은 예 를 들 어 클래스 A 의 정 의 를 포함 하 는 파일 에 두 고 page1.phop 과 page2.phop 에 모두 이 파일 을 포함 할 수 있 습 니 다.
<?php// classa.inc:class A{ var $one = 1;
function show_one() { echo $this->one; }}
// page1.php:include("classa.inc");
$a = new A;$s = serialize($a);// 페이지 2.php 에서$fp=fopen("store","w")을 찾 을 수 있 도록$s 를 어 딘 가 에 저장 합 니 다.fputs($fp, $s);fclose($fp);
//page2.php://정상 적 인 서열 화 를 위해 서 는 이 줄 include("classa.inc")가 필요 합 니 다.
$s = implode("", @file("store"));$a = unserialize($s);
//현재$a 대상 의 쇼 를 사용 할 수 있 습 니 다.one()함수$a->showone();?>
세 션 을 사용 하고 session 을 사용 했다 면register()는 대상 을 등록 합 니 다.이 대상 들 은 PHP 페이지 가 끝 날 때마다 자동 으로 정렬 되 고 다음 페이지 마다 자동 으로 정렬 됩 니 다.기본적으로 이 대상 들 이 세 션 의 일부분 이 되면 모든 페이지 에 나타 날 수 있다 는 것 이다.
모든 페이지 에 등 록 된 대상 의 클래스 정 의 를 포함 하 는 것 을 강력 히 권장 합 니 다.모든 페이지 에 이러한 클래스 가 사용 되 는 것 은 아니 더 라 도.이렇게 하지 않 으 면 한 대상 이 서열 화 되 었 으 나 그 와 관련 된 클래스 를 잃 고 stdClass 의 대상 이 되 어 사용 가능 한 함수 가 전혀 없습니다.그러면 쓸모 가 없습니다.
따라서 위의 예 에서$a 가 session 을 실행 하면register("a")는 세 션 의 일부분 이 되 었 습 니 다.모든 페이지 에 classa.inc 파일 을 포함 해 야 합 니 다.page1.phop 과 page2.phop 만 포함 하 는 것 이 아 닙 니 다.
물론 직렬 화 대상 은 여러 곳 에 활용 할 수 있다.물론 PHP 5 에 서 는 직렬 화 처리 가 다 릅 니 다.매 뉴 얼 에 있 는 설명 을 살 펴 보 겠 습 니 다.
serialize()클래스 에 마술 이름 이 있 는 지 확인 합 니 다sleep 의 함수.만약 이렇다면,이 함 수 는 어떤 서열 화 되 기 전에 실 행 될 것 이다.대상 을 지우 고 이 대상 에 직렬 화 되 어야 할 모든 변수 이름 을 포함 하 는 배열 을 되 돌려 야 합 니 다.
사용sleep 의 목적 은 대상 이 가지 고 있 을 수 있 는 모든데이터베이스연결 을 닫 고 대기 중인 데 이 터 를 제출 하거나 유사 한 제거 작업 을 하 는 것 입 니 다.또한,완전히 저장 되 지 않 고 아주 큰 대상 이 있다 면 이 함수 도 유용 합 니 다.
반면,unserialize()검 사 는 마술 이름wakeup 함수 의 존재.존재 한다 면 이 함 수 는 대상 이 가 질 수 있 는 모든 자원 을 재 구축 할 수 있 습 니 다.
사용wakeup 의 목적 은 직렬 화 에서 잃 어 버 릴 수 있 는 모든 데이터베이스 연결 을 재 구축 하고 다른 초기 화 작업 을 처리 하 는 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
poj 2540 Hotter Colder(선형 계획 가능 영역)Hotter Colder Time Limit: 1000MS Memory Limit: 65536K The children's game Hotter Colder is played as follows. Player A l...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.