Я должен сказать, что я не вижу, где метод сериализуется в первом примере.При сериализации никакие методы не сериализуются, только имя класса и свойства.Это можно увидеть, если взглянуть на сериализованные данные
$ser = serialize($object);
var_dump($ser);
. Вы заметите, что ни один из методов не упомянут.Однако, если вы десериализуете объект, он воссоздается по имени класса.Или другими словами: вы получите новый объект, но со значениями, которые вы сериализовали ранее.
Обычно это не так важно, как кажется, потому что обычно сериализованный / несериализованный объект должен вести себя так же.
// serialize
class A {
public $a = null;
public function test () {
echo "Hello";
}
}
$a = new A;
echo $a->test(); // "Hello"
$x = serialize($a);
// unserialize (somewhere else)
class A {
public $a = null;
public function test () {
echo "World";
}
}
$a = unserialize($x);
echo $a->test(); // "World"
Здесь сериализатор использует «неправильный» класс, и вывод отличается от ожидаемого.Пока вы убедитесь, что нет конфликтов имен классов, вам обычно не нужно об этом думать.