Note that static members of an object are not serialized.Серијализација на објекти
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Серијализација на објекти
Референца за `language.oop5.serialization.php` со подобрена типографија и навигација.
Серијализирање објекти - објекти во сесии
serialize() враќа стринг што содржи бајт-стрим репрезентација на која било вредност што може да се чува во PHP. unserialize() може да го користи овој стринг за да ги рекреира оригиналните вредности на променливите. Користењето serialize за зачувување на објект ќе ги зачува сите променливи во објект. Методите во објект нема да бидат зачувани, само името на класата.
За да може unserialize() објект, класата на тој објект треба да биде дефинирана. Тоа е, ако имате објект од класа А и го серијализирате ова, ќе добиете стринг што се однесува на класа А и ги содржи сите вредности на променливите содржани во него. Ако сакате да можете да го десеријализирате ова во друга датотека, објект од класа А, дефиницијата на класа А мора прво да биде присутна во таа датотека. Ова може да се направи, на пример, со чување на дефиницијата на класата А во датотека за вклучување и вклучување на оваа датотека или со користење на spl_autoload_register() function.
<?php
// A.php:
class A {
public $one = 1;
public function show_one() {
echo $this->one;
}
}
// page1.php:
include "A.php";
$a = new A;
$s = serialize($a);
// store $s somewhere where page2.php can find it.
file_put_contents('store', $s);
// page2.php:
// this is needed for the unserialize to work properly.
include "A.php";
$s = file_get_contents('store');
$a = unserialize($s);
// now use the function show_one() of the $a object.
$a->show_one();
?>Силно се препорачува ако апликацијата серијализира објекти, за подоцнежна употреба во апликацијата, апликацијата да ја вклучува дефиницијата на класата за тој објект низ целата апликација. Неправењето на ова може да резултира со десеријализирање на објект без дефиниција на класа, што ќе резултира со тоа што PHP ќе му даде на објектот класа на __PHP_Incomplete_Class_Name, која нема методи и би го направила објектот бескорисен.
Значи, ако во горниот пример $a стана дел од сесија со додавање нов клуч на $_SESSION суперглобалната низа, треба да ја вклучите датотеката A.php на сите ваши страници, не само page1.php
and page2.php.
Покрај горенаведениот совет, имајте предвид дека можете исто така да се поврзете на настаните за серијализирање и десеријализирање на објект користејќи ги __sleep() and __wakeup() методи. Користење __sleep() исто така ви овозможува да серијализирате само подмножество од својствата на објектот.
Белешки од корисници 3 белешки
Reading this page you'd be left with the impression that a class's `serialize` and `unserialize` methods are unrelated to the `serialize` and `unserialize` core functions; that only `__sleep` and `__unsleep` allow you to customize an object's serialization interface. But look at http://php.net/manual/en/class.serializable.php and you'll see that there is a more straightforward way to control how a user-defined object is serialized and unserialized.Until such time as these documents are updated, note that `session_register()` is not needed to automatically serialize & unserialize objects in sessions. Any objects in `$_SESSION` are serialized when the session is closed (via `session_write_close()` or upon script exit) & unserialized when opened (via `session_start()`). The note about including classes throughout an app (either by including the definition globally or autoloading it) still holds.