基本设置。我有一个classA实例,它是classX的子类...在构造时(或其他时候),我希望它加载另一个类classB,这个类也是classX的子类,并在原地用classB替换它自己。有点像一个工厂,但它可以透明地替换自己。如果需要,如果有方法(在运行时)更改对象的子类,我可以用classA包装classB。
目前我正在使用classA::__call()来模拟MRO的魔力,但它看起来非常不优雅。这需要对classA/B的调用者透明地完成,以便对外部世界来说,它不知道classA在构造之后(或其他任何地方)已经用classB替换了自己。
我知道PHP在做这样的事情时可能有点瘦……我怀疑我们不能,但这对我的情况是很方便的。
另外,5.3,但理想情况下(讨厌) 5.2/x
提前感谢(希望我是用Python编写的)
发布于 2010-07-09 10:05:16
这在PHP中目前是不可能的...
而不做傻事。
如果对象的每个实例都是一个引用,并且可以在$GLOBALS中找到这些引用,并且对象知道其中每个实例的名称,那么您可以用新对象替换旧对象的每个引用。外面的世界不会知道其中的区别。
然而,这是一个非常糟糕的想法。使用__call魔法可能是实现目标的最不疯狂的方法。
编辑:总是有runkit,它可以让你做一些事情,比如在类中添加和删除方法。然而,它是一个PECL扩展,甚至可能无法正常工作……
https://stackoverflow.com/questions/3208957
复制相似问题