Сериализация и наследование PHP

Не уверен, что процесс для сериализации дочернего класса, который реализует Serializable интерфейс, родительский класс больше не сохраняет данные, которые он когда-то сериализовал. Есть ли шаг, который я пропускаю?

class A {
private $aVar = "test";
}

class B extends A implements Serializable {
private static $bVar = "tset";

public function serialize() {
return serialize(self::$bVar);
}
public function unserialize($serialized) {
self::$bVar = unserialize($serialized);
}
}

$s = serialize(new B());
$u = unserialize($s);

0

Решение

Я думаю, вы немного озадачены тем, что здесь происходит, но, по сути, вы видите неправильно распределенные переменные.

  • Публичные переменные, переменные, которые виден всем классам
  • Частные переменные, переменные, которые виден только классу, к которому они принадлежат.
  • Защищенные переменные, переменные, которые виден только классу, к которому они принадлежат, и любым подклассам.

Если бы вы должны были сделать $aVar в Class A защищенный или публичный, вы сможете получить к нему доступ в Class B:

Вы получите следующее:

B Object
(
[bVar:B:private] => tset
[aVar] => test
)
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector