我正在编写一个类似于 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()
,但我想知道是否有可能获得相同的对象。