Сериализация

Сериализация объектов - сохранение объектов между сессиями. Функция serialize() возвращает строковое представление любого значения, которое может быть сохранено в PHP.

    Сериализация

    Сериализация ( функция serialize() )возвращает строковое представление любого значения. Функция unserialize() используется, чтобы восстановить значение в объект
    Чтобы десериализовать объект функцией unserialize(), необходимо заранее определить класс этого объекта
    Методы в объекте не будут сохранены, только имя класса
    Статические элементы объекта не сериализуются


    Если в приложении сериализуются объекты, которые будут использованы в приложении позже, следуют строгой рекомендации — подключать определение класса для этого объекта во всём приложении. При невыполнении этого требования десериализация объекта пройдёт и без определения класса, но PHP назначит этому объекту класс __PHP_Incomplete_Class_Name, у которого нет методов, и сделает объект бесполезным

    #Test.php class Test { public $var1 = "test1"; public $var2 = "test2"; protected $var3 = "test3"; private $var4 = "test4"; public function __construct() { } public function testFunc() { echo "testFunc()"; } public function start() { echo "start()"; } } #test.php include "Test.php"; $class1 = new Test; #Сериализовать объект в строку $s = serialize($class1); #Поместить строку в отдельный файл file_put_contents('testFile', $s); #page.php #Подключить файл с определением класса include "Test.php"; #Получить строку и сохранить в переменную $s = file_get_contents('testFile'); echo $s; #O:4:"Test":4:{s:4:"var1";s:5:"test1";s:4:"var2";s:5:"test2";s:7:"*var3";s:5:"test3";s:10:"Testvar4";s:5:"test4";} echo "<br>"; echo "<br>"; #Преобразовать строку в объект $class2 = unserialize($s); var_dump($class2); #При попытке восстановить объект без определения исходного метода #object(__PHP_Incomplete_Class)#1 (5) { ["__PHP_Incomplete_Class_Name"]=> string(4) "Test" ["var1"]=> string(5) "test1" ["var2"]=> string(5) "test2" ["var3":protected]=> string(5) "test3" ["var4":"Test":private]=> string(5) "test4" } echo "<br>"; echo "<br>"; #Получить значения переменных echo $class2->var1; echo "<br>"; #Вызов метода $class2->start();

    Обратите внимание, что, кроме уже приведённого совета, можно подключиться к событиям сериализации и десериализации объекта через методы __sleep() и __wakeup(). В методе __sleep() можно управлять тем, какие свойства объекта будут сериализованы.

    Ключевое слово Final

    Ключевое слово final, которое указали перед определением метода или константы, не даёт дочерним классам переопределять этот метод или константу. Ключевое слово не даст расширить класс, если класс определили окончательным


    Источники
    Последнее изменение: 19.11.2024 18:20


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ