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

Чтобы иметь возможность unserialize() объекта, необходимо определить класс этого объекта. То есть, если у вас есть объект класса А и сериализовать его, вы получите строку, которая ссылается на класс А и содержит все значения содержащихся в нем переменных. Если вы хотите иметь возможность десериализовать это в другом файле, объекте класса A, определение класса A должно сначала присутствовать в этом файле. Это можно сделать, например, сохранив определение класса A во включаемом файле и включив этот файл или используя функцию spl_autoload_register() .

<?php
// classa.inc:
  
  class A {
      public $one = 1;
    
      public function show_one() {
          echo $this->one;
      }
  }
  
// page1.php:

  include("classa.inc");
  
  $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("classa.inc");

  $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_register("a"), вы должны включить файл classa.incна все свои страницы, а не только на page1.php и page2.php .

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