변수처리 serialize
(PHP 4, PHP 5, PHP 7, PHP 8)
serialize — 값의 저장 가능한 표현을 생성합니다.
설명
serialize(mixed $value
): string
값의 저장 가능한 표현을 생성합니다.
이것은 유형과 구조를 잃지 않고 PHP 값을 저장하거나 전달하는 데 유용합니다.
직렬화된 문자열을 다시 PHP 값으로 만들려면 unserialize()를 사용하십시오.
매개변수
value
- 직렬화할 값입니다. serialize()는 리소스 유형과 일부 객체를 제외한 모든 유형을 처리합니다(아래 참고 참조). 자신에 대한 참조를 포함하는 배열을 serialize()할 수도 있습니다. 직렬화하는 배열/객체 내부의 순환 참조도 저장됩니다. 다른 모든 참조는 손실됩니다.
객체를 직렬화할 때 PHP는 직렬화 전에 __serialize() 또는 __sleep() 멤버 함수 호출을 시도합니다. 이것은 객체가 직렬화되기 전에 마지막 순간 정리 등을 수행할 수 있도록 하기 위한 것입니다. 마찬가지로, 객체가 unserialize()를 사용하여 복원되면 __unserialize() 또는 __wakeup() 멤버 함수가 호출됩니다.
메모: 개체의 private 멤버는 멤버 이름 앞에 클래스 이름이 추가됩니다. 보호된 구성원은 구성원 이름 앞에 '*'가 추가됩니다. 이러한 추가 값은 양쪽에 null 바이트가 있습니다.
반환 값
어디에나 저장할 수 있는 value
의 바이트 스트림 표현을 포함하는 문자열을 반환합니다.
이것은 널 바이트를 포함할 수 있는 이진 문자열이며 그대로 저장하고 처리해야 합니다. 예를 들어, serialize() 출력은 일반적으로 CHAR 또는 TEXT 필드가 아닌 데이터베이스의 BLOB 필드에 저장되어야 합니다.
Examples
예제 #1 serialize() 예제
<?php
// $session_data contains a multi-dimensional array with session
// information for the current user. We use serialize() to store
// it in a database at the end of the request.
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, array_reverse($sqldata))) {
/* Something went wrong.. */
}
}
?>
메모
많은 내장 PHP 객체는 직렬화할 수 없습니다. 그러나 이 능력을 가진 객체들은 Serializable 인터페이스나 __serialize()/__unserialize() 또는 __sleep()/__wakeup() 메서드를 구현합니다. 내부 클래스가 이러한 요구 사항을 충족하지 않으면 안정적으로 직렬화할 수 없습니다.
인터페이스를 구현하거나 메서드를 노출하지 않고 일부 내부 개체를 직렬화할 수 있는 위의 규칙에 대한 몇 가지 역사적 예외가 있습니다.
경고 serialize()가 객체를 직렬화할 때 최대 호환성을 위해 네임스페이스 클래스의 클래스 이름에 선행 백슬래시가 포함되지 않습니다.
기타
- unserialize() - 저장된 표현에서 PHP 값 생성
- var_export() - 변수의 구문 분석 가능한 문자열 표현을 출력하거나 반환합니다.
- json_encode() - 값의 JSON 표현을 반환합니다.
- Serializing Objects
- __sleep()
- __wakeup()
- __serialize()
- __unserialize()