1

Java のCurrencyに似た PHP クラスを作成しています。

このクラスは、特定の通貨に対して複数の Currency インスタンスが存在しないように設計されています。したがって、パブリック コンストラクターはありません。getInstance メソッドを使用して Currency インスタンスを取得します。

PHP を使用すると、インスタンス化されたオブジェクトの静的配列を保持し、ルックアップを実行しgetInstance()て既存のインスタンスを返したり、必要に応じてインスタンス化したりするのは非常に簡単です。

問題はシリアル化に伴います。Serializableを実装unserialize()したとしても、この時点でオブジェクトがすでにインスタンス化されているため、 で返したいインスタンスを選択する方法がありません。また、PHP では をオーバーライドできないため$thisです。

class Currency implements Serializable
{
    public function getInstance()
    {
        // ...
    }

    public function serialize()
    {
        // ...
    }

    public function unserialize($data)
    {
        // At this point, the object is already instantiated,
        // so I can't just return self::getInstance(),
        // and can't override $this
    }
}

非シリアル化時に返すインスタンスを選択するための技術的な解決策はありますか?

- 編集 -

これは私が解決しようとしているユースケースです:

$euro = Currency::getInstance('EUR');
assert($euro === unserialize(serialize($euro));

で同様のオブジェクトを作成できることは知っていますが、同じunserialize()オブジェクトを取得できるかどうか疑問に思っています。

4

1 に答える 1