PHP.mk документација

serialize

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.serialize.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.serialize.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
serialize

Референца за `function.serialize.php` со подобрена типографија и навигација.

function.serialize.php

serialize

(PHP 4, PHP 5, PHP 7, PHP 8)

serializeГенерира претставување што може да се зачува на вредност

= NULL

serialize(mixed $value): string

Генерира претставување што може да се зачува на вредност.

Ова е корисно за складирање или поминување на PHP вредности без губење на нивниот тип и структура.

За да ја претворите серијализираната низа повторно во PHP вредност, користете unserialize().

Параметри

value

Вредноста што треба да се серијализира. serialize() ракува со сите типови, освен resource-тип и некои objectи (види забелешка подолу). Можете дури и serialize() низи што содржат референци на себе. Кружните референци внатре во низата/објектот што го серијализирате исто така ќе бидат зачувани. Секоја друга референца ќе биде изгубена.

При серијализирање објекти, PHP ќе се обиде да ги повика членските функции __serialize() or __sleep() пред серијализација. Ова е за да му се овозможи на објектот да направи какво било чистење во последен момент, итн. пред да биде серијализиран. Исто така, кога објектот се враќа користејќи unserialize() the __unserialize() or __wakeup() се повикува членската функција.

Забелешка:

Приватните членови на објектот имаат името на класата додадено пред името на членот; заштитените членови имаат додадено '*' пред името на членот. Овие додадени вредности имаат нулти бајти од двете страни.

Вратени вредности

Враќа низа што содржи бинарна претстава на value што може да се зачува било каде.

Имајте предвид дека ова е бинарна низа што може да вклучува нулти бајти и треба да се чува и ракува како таква. На пример, serialize() излезот генерално треба да се чува во BLOB поле во база на податоци, наместо во CHAR или TEXT поле.

Примери

Пример #1 serialize() example

<?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 објекти не можат да се серијализираат. Сепак, оние со оваа способност или ја имплементираат Countable интерфејсот или магичниот __serialize()/__unserialize() or __sleep()/__wakeup() методи. Ако внатрешна класа не ги исполнува ниту еден од овие барања, таа не може сигурно да се серијализира.

Постојат некои историски исклучоци од горенаведеното правило, каде што некои внатрешни објекти можеа да се серијализираат без да се имплементира интерфејсот или да се откријат методите.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

Кога serialize() серијализира објекти, водечката коса црта не е вклучена во името на класата на класите со имиња за максимална компатибилност.

Види Исто така

Белешки од корисници Управување со PDO конекции

egingell на sisna точка com
19 години пред
<?
/*
Anatomy of a serialize()'ed value:

 String
 s:size:value;

 Integer
 i:value;

 Boolean
 b:value; (does not store "true" or "false", does store '1' or '0')

 Null
 N;

 Array
 a:size:{key definition;value definition;(repeated per element)}

 Object
 O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}

 String values are always in double quotes
 Array keys are always integers or strings
    "null => 'value'" equates to 's:0:"";s:5:"value";',
    "true => 'value'" equates to 'i:1;s:5:"value";',
    "false => 'value'" equates to 'i:0;s:5:"value";',
    "array(whatever the contents) => 'value'" equates to an "illegal offset type" warning because you can't use an
    array as a key; however, if you use a variable containing an array as a key, it will equate to 's:5:"Array";s:5:"value";',
     and
    attempting to use an object as a key will result in the same behavior as using an array will.
*/
?>
Анонимен
пред 14 години
Please! please! please! DO NOT serialize data and place it into your database. Serialize can be used that way, but that's missing the point of a relational database and the datatypes inherent in your database engine. Doing this makes data in your database non-portable, difficult to read, and can complicate queries. If you want your application to be portable to other languages, like let's say you find that you want to use Java for some portion of your app that it makes sense to use Java in, serialization will become a pain in the buttocks. You should always be able to query and modify data in the database without using a third party intermediary tool to manipulate data to be inserted. 

I've encountered this too many times in my career, it makes for difficult to maintain code, code with portability issues, and data that is it more difficult to migrate to other RDMS systems, new schema, etc. It also has the added disadvantage of making it messy to search your database based on one of the fields that you've serialized. 

That's not to say serialize() is useless. It's not... A good place to use it may be a cache file that contains the result of a data intensive operation, for instance. There are tons of others... Just don't abuse serialize because the next guy who comes along will have a maintenance or migration nightmare.
mark на bvits точка co точка uk
3 години пред
There is a type not mentioned in the user notes so far, 'E'.  This is the newer Enum class that can be utilised:

login_security|E:25:"Permission:manageClient"
MC_Gurk на gmx точка net
20 години пред
If you are going to serialie an object which contains references to other objects you want to serialize some time later, these references will be lost when the object is unserialized.
The references can only be kept if all of your objects are serialized at once.
That means:

$a = new ClassA(); 
$b = new ClassB($a); //$b containes a reference to $a;

$s1=serialize($a);
$s2=serialize($b);

$a=unserialize($s1);
$b=unserialize($s2);

now b references to an object of ClassA which is not $a. $a is another object of Class A.

use this:
$buf[0]=$a;
$buf[1]=$b;
$s=serialize($buf);
$buf=unserialize($s);
$a=$buf[0];
$b=$buf[1];

all references are intact.
nh на ngin точка de
пред 13 години
Serializing floating point numbers leads to weird precision offset errors:

<?php

echo round(96.670000000000002, 2);
// 96.67

echo serialize(round(96.670000000000002, 2));
// d:96.670000000000002;

echo serialize(96.67);
// d:96.670000000000002;

?>

Not only is this wrong, but it adds a lot of unnecessary bulk to serialized data. Probably better to use json_encode() instead (which apparently is faster than serialize(), anyway).
Andrew B
пред 13 години
When you serialize an array the internal pointer will not be preserved. Apparently this is the expected behavior but was a bit of a gotcha moment for me. Copy and paste example below.

<?php
//Internal Pointer will be 2 once variables have been assigned.
$array = array();
$array[] = 1;
$array[] = 2;
$array[] = 3;

//Unset variables. Internal pointer will still be at 2.     
unset($array[0]);
unset($array[1]);
unset($array[2]);

//Serialize
$serializeArray = serialize($array);

//Unserialize
$array = unserialize($serializeArray);

//Add a new element to the array
//If the internal pointer was preserved, the new array key should be 3.
//Instead the internal pointer has been reset, and the new array key is 0.
$array[] = 4;

//Expected Key - 3
//Actual Key - 0
echo "<pre>" , print_r($array, 1) , "</pre>";
?>
frost на easycast точка ru
12 години пред
Closures cannot be serialized:
<?php
$func = function () {echo 'hello!';};
$func(); // prints "hello!"

$result = serialize($func);  // Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed' 
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.