2017-11-01 16 views
0

Serializableインターフェイスを実装している子クラスをシリアル化するプロセスがわからない場合、親クラスは一度シリアル化していたデータを保持しなくなります。私は行方不明ですか?PHPのシリアル化と継承

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

私が実際にしようとしていますどのような子クラスに静的変数を作成するのですが、直列化は静的変数を処理しないので、私は自分自身を直列化しようとしていました。ここでは、ここでこれを変更してシナリオをよりよく反映させるようにします。たぶんタイトルは、子クラスの静的変数を直列化する方法でしょうか? – nuebKitsune

答えて

0

私はあなたがここで何が起こっているかのように少し混乱していると思いますが、基本的に何を見ていることは間違っている変数をスコープ。

  • パブリック変数は、すべてのクラスに対して可視
  • プライベート変数である変数は、彼らだけがを属するクラスに表示されている変数されています。
  • 保護された変数は、それらが属するクラスにのみ表示されるの変数であり、サブクラスです。

あなたはClass A$aVar保護または公衆を作るとしたら、あなたがClass Bでそれにアクセスすることができるだろうに。

あなたは次のようになるだろう:

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

しかし、私はそれにアクセスしたくありません。もし私が 'Serializable'インターフェースとそれに対応するメソッドを削除すると、すべてが完全にうまくシリアル化されます。 – nuebKitsune

関連する問題