>  기사  >  백엔드 개발  >  PHP serialize()와 unserialize()의 차이점

PHP serialize()와 unserialize()의 차이점

墨辰丷
墨辰丷원래의
2018-05-17 14:01:412339검색

이 글에서는 주로 php serialize()와 unserialize() 사이의 몇 가지 차이점을 소개합니다. 필요한 친구는 이를 참조할 수 있습니다.

serialize() 및 unserialize()는 php 매뉴얼에 설명되어 있습니다.

serialize — 저장 가능한 표현을 생성합니다. 값

serialize — 저장된 표현에서 PHP 값 생성serialize — 产生一个可存储的值的表示

unserialize — Creates a PHP value from a stored representation

unserialize

unserialize — 저장된 표현에서 PHP 값 생성

unserialize — 저장된 표현에서 생성

의 PHP 값 분명히 "저장된 표현"에 대한 설명은 저장 가능한 값으로 변환된 후에도 여전히 매우 혼란스럽습니다.

언어를 명확하게 표현할 수 없는 경우 특정 PHP 예제를 사용하여 이 두 함수의 사용법을 배울 수 있습니다.

<?php
//声明一个类
class dog {

  var $name;
  var $age;
  var $owner;

  function dog($in_name="unnamed",$in_age="0",$in_owner="unknown") {
    $this->name = $in_name;
    $this->age = $in_age;
    $this->owner = $in_owner;
  }

  function getage() {
    return ($this->age * 365);
  }
  
  function getowner() {
    return ($this->owner);
  }
  
  function getname() {
    return ($this->name);
  }
}
//实例化这个类
$ourfirstdog = new dog("Rover",12,"Lisa and Graham");
//用serialize函数将这个实例转化为一个序列化的字符串
$dogdisc = serialize($ourfirstdog);
print $dogdisc; //$ourfirstdog 已经序列化为字符串 O:3:"dog":3:{s:4:"name";s:5:"Rover";s:3:"age";i:12;s:5:"owner";s:15:"Lisa and Graham";}

print &#39;<BR>&#39;;

/* 
-----------------------------------------------------------------------
  在这里你可以将字符串 $dogdisc 存储到任何地方如 session,cookie,数据库,php文件 
-----------------------------------------------------------------------
*/

//我们在此注销这个类
unset($ourfirstdog);

/*  还原操作  */

/* 
-----------------------------------------------------------------------
  在这里将字符串 $dogdisc 从你存储的地方读出来如 session,cookie,数据库,php文件 
-----------------------------------------------------------------------
*/


//我们在这里用 unserialize() 还原已经序列化的对象
$pet = unserialize($dogdisc); //此时的 $pet 已经是前面的 $ourfirstdog 对象了
//获得年龄和名字属性
$old = $pet->getage();
$name = $pet->getname();
//这个类此时无需实例化可以继续使用,而且属性和值都是保持在序列化之前的状态
print "Our first dog is called $name and is $old days old<br>";
print &#39;<BR>&#39;;
?>

예제의 개체를 배열과 같은 다른 유형으로 변경할 수도 있습니다. 같은 효과입니다!

 실제로 serialize()는 객체, 배열 등 PHP의 변수 값을 문자열로 직렬화하여 저장하는 것입니다. 직렬화된 문자열을 데이터베이스와 세션, 쿠키 등 다른 곳에 저장할 수 있습니다. 등을 사용하면 직렬화 작업에서 이러한 값의 유형과 구조가 손실되지 않습니다. 이러한 방식으로 이러한 변수의 데이터는 PHP 페이지와 다른 PHP 프로그램 간에 전달될 수 있습니다.

 그리고 unserialize()는 직렬화된 문자열을 다시 PHP 값으로 변환하는 것입니다.

  다음은 PHP 매뉴얼의 또 다른 설명입니다. 위의 예를 읽고 나면 다음 단어의 의미를 쉽게 이해할 수 있습니다.

  직렬화된 문자열을 다시 PHP 값으로 변경하려면 unserialize( ) . serialize()는 리소스를 제외한 모든 유형을 처리할 수 있습니다. 자신에 대한 참조가 포함된 배열을 serialize()할 수도 있습니다. 직렬화()하는 배열/객체의 참조도 저장됩니다.

 객체를 직렬화할 때 PHP는 시퀀스 작업 전에 객체의 멤버 함수 __sleep()을 호출하려고 시도합니다. 이를 통해 객체가 직렬화되기 전에 모든 정리 작업을 수행할 수 있습니다. 마찬가지로 unserialize()를 사용하여 객체를 복원할 때 __wakeup() 멤버 함수는 단일 직렬화된 변수에 대해 작동하고 이를 다시 PHP 값으로 변환합니다. 반환되는 것은 정수, 부동 소수점, 문자열, 배열 또는 객체일 수 있는 변환된 값입니다. 전달된 문자열이 역직렬화할 수 없는 경우 FALSE를 반환합니다.

관련 권장사항:

PHP의 serialize() 및 unserialize() 함수 예제에 대한 자세한 설명

양식 서식 지정 플러그인 jquery.serializeJSON에 대한 자세한 설명

직렬화하고 업로드할 Ajax serialize() 양식 파일

🎜

위 내용은 PHP serialize()와 unserialize()의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.