>  기사  >  백엔드 개발  >  PHP에서 SERIALIZE와 JSON의 직렬화와 역직렬화 작업의 차이점 분석

PHP에서 SERIALIZE와 JSON의 직렬화와 역직렬화 작업의 차이점 분석

高洛峰
高洛峰원래의
2016-12-20 15:35:441395검색

이 기사의 예에서는 PHP에서 SERIALIZE 및 JSON의 직렬화 작업과 역직렬화 작업의 차이점을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

PHP에서 SERIALIZE와 JSON 직렬화 및 역직렬화의 차이점은 무엇인가요? 이 문제는 편집기를 통해 살펴볼 수 있습니다. 다음과 같이 표시됩니다.

PHP에서 객체나 배열을 직렬화하거나 역직렬화하는 직렬화와 json의 차이점은 무엇인가요?

객체와 배열을 가정합니다.

$web = new stdClass;
$web->site = 'tantengvip';
$web->owner = 'tuntun';
$web->age = 5;
//和
$web = array();
$web['site'] = 'tantengvip';
$web['owner'] = 'tuntun';
$web['age'] = 5;

직렬화 함수와 역직렬화 함수를 사용하여 각각 직렬화하고 역직렬화하고 인쇄된 결과는 다음과 같습니다.

직렬화 방법 사용:

var_dump(serialize($web));
var_dump(unserialize(serialize($web)));
var_dump(json_encode($web));
var_dump(json_decode(json_encode($web)));

결과:

string 'O:8:"stdClass":3:{s:4:"site";s:10:"tantengvip";s:5:"owner";s:6:"tuntun";s:3:"age";i:5;}' (length=87)
object(stdClass)[127]
 public 'site' => string 'tantengvip' (length=10)
 public 'owner' => string 'tuntun' (length=6)
 public 'age' => int 5
string '{"site":"tantengvip","owner":"tuntun","age":5}' (length=46)
object(stdClass)[127]
 public 'site' => string 'tantengvip' (length=10)
 public 'owner' => string 'tuntun' (length=6)
 public 'age' => int 5

json 방법 사용:

var_dump(serialize($web));
var_dump(unserialize(serialize($web)));
var_dump(json_encode($web));
var_dump(json_decode(json_encode($web),true));

결과:

string 'a:3:{s:4:"site";s:10:"tantengvip";s:5:"owner";s:6:"tuntun";s:3:"age";i:5;}' (length=74)
array (size=3)
 'site' => string 'tantengvip' (length=10)
 'owner' => string 'tuntun' (length=6)
 'age' => int 5
string '{"site":"tantengvip","owner":"tuntun","age":5}' (length=46)
array (size=3)
 'site' => string 'tantengvip' (length=10)
 'owner' => string 'tuntun' (length=6)
 'age' => int 5

앞서 정의한 이러한 객체나 배열에 대해 serialize와 json을 사용하여 직렬화하고, deserialize된 결과는 직렬화 형식이 다르다는 점 외에는 차이가 없다는 것을 확인했습니다.

그렇다면 그들 사이의 차이점은 무엇입니까? 다음 텍스트에 매우 잘 요약되어 있으므로 직접 설명하지는 않겠습니다. 이를 확인하는 코드를 작성해 보세요.

json 직렬화 및 역직렬화 사용

장점:

직렬화 후에도 변수를 읽을 수 있음

JSON 형식이 표준이므로 다른 시스템에서 사용할 수 있음

단점:

은 UFT-8 데이터에만 유효하며 다른 인코딩은 제대로 작동하지 않을 수 있습니다.

는 stdClass 클래스의 예에만 유효합니다.

사용 직렬화 및 역직렬화를 위한 직렬화 메서드

장점:

UTF-8이 아닌 변수 허용

stdClass 예제 이외의 다른 인스턴스 지원

단점:

인코딩된 텍스트는 사람이 읽을 수 없습니다.

다른 언어의 시스템에서는 참조할 수 없습니다. ​​

좋아, 코드를 작성하고 다음을 확인하세요.

class Test
{
  private $pri = 'pri';
  public $class = 'Test';
  public function __construct()
  {
    $this->class = 'Test construct';
    $this->pri = 'pri construct';
  }
}
$test = new Test();
var_dump(serialize($test));
var_dump(unserialize(serialize($test)));
var_dump(json_encode($test));
var_dump(json_decode(json_encode($test)));

결과 :

string 'O:4:"Test":2:{s:9:"�Test�pri";s:13:"pri construct";s:5:"class";s:14:"Test construct";}' (length=86)
object(Test)[127]
 private 'pri' => string 'pri construct' (length=13)
 public 'class' => string 'Test construct' (length=14)
string '{"class":"Test construct"}' (length=26)
object(stdClass)[127]
 public 'class' => string 'Test construct' (length=14)

json 직렬화 및 역직렬화는 클래스의 전용 멤버 변수를 손실하는 반면 직렬화 및 역직렬화는 클래스 변수가 정상이지만 클래스 멤버 메서드는 직렬화 또는 역직렬화할 수 없다는 것을 발견했습니다.

일반적으로 json을 사용하는 것이 더 좋습니다. 왜냐하면 json은 크로스 플랫폼 범용 형식이기 때문입니다. json 외에 xml을 사용하는 것도 좋습니다. 그렇다면 언제 직렬화를 사용해야 할까요?

클래스를 역직렬화할 때 매직 메서드 __wakeUp()이 기본적으로 호출되며, 이를 통해 개체는 직렬화 중에 유지되지 않은 다양한 상태를 다시 설정할 수 있습니다. 예: 데이터베이스 연결 등 그건 또 다른 질문입니다. 여기서는 다루지 않겠습니다.

이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

PHP에서 SERIALIZE와 JSON 간의 직렬화 및 역직렬화 작업의 차이점 분석에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

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