이 기사의 예에서는 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 중국어 웹사이트에 주목하세요!