2017-11-01 1 views
0

Nicht sicher, was der Prozess für das Serialisieren einer untergeordneten Klasse ist, die die Schnittstelle Serializable implementiert, die übergeordnete Klasse behält nicht mehr die Daten, die es einmal serialisiert wurde. Gibt es einen Schritt, den ich vermisse?PHP-Serialisierung und Vererbung

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

Was ich wirklich versucht, mich zu do erstellt eine statische Variable in der Kindklasse, aber da die Serialisierung keine statischen Variablen behandelt, habe ich gerade versucht, diese zu serialisieren; Hier, ich werde jetzt weitermachen und das jetzt ändern, also spiegelt sich das Szenario besser wider. Vielleicht sollte der Titel sein, wie man eine statische Variable in einer Kindklasse serialisiert? – nuebKitsune

Antwort

0

Ich denke, Sie sind ein wenig verwirrt, was hier passiert, aber im Wesentlichen, was Sie sehen, ist falsch Bereich Variablen.

  • öffentliche Variablen, Variablen, die
  • private Variablensichtbar für alle Klassen sind, sind Variablen, die sichtbar nur für die Klasse, zu dem sie gehören.
  • Geschützte Variablen, Variablen, die nur für die Klasse sichtbar sind, zu der sie gehören, und alle Unterklassen.

Wenn Sie waren $aVar in Class A geschützt machen oder öffentlich würden Sie für den Zugriff in der Lage sein, Class B:

Sie folgendes erhalten würde:

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

aber ich will nicht darauf zugreifen; wenn ich die 'Serializable'-Schnittstelle entfernen und den Methoden entsprechen würde, ist alles perfekt serialisiert. – nuebKitsune