首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP和运行时子类化/对象重分类

PHP和运行时子类化/对象重分类
EN

Stack Overflow用户
提问于 2010-07-09 08:07:27
回答 1查看 353关注 0票数 1

基本设置。我有一个classA实例,它是classX的子类...在构造时(或其他时候),我希望它加载另一个类classB,这个类也是classX的子类,并在原地用classB替换它自己。有点像一个工厂,但它可以透明地替换自己。如果需要,如果有方法(在运行时)更改对象的子类,我可以用classA包装classB

目前我正在使用classA::__call()来模拟MRO的魔力,但它看起来非常不优雅。这需要对classA/B的调用者透明地完成,以便对外部世界来说,它不知道classA在构造之后(或其他任何地方)已经用classB替换了自己。

我知道PHP在做这样的事情时可能有点瘦……我怀疑我们不能,但这对我的情况是很方便的。

另外,5.3,但理想情况下(讨厌) 5.2/x

提前感谢(希望我是用Python编写的)

EN

回答 1

Stack Overflow用户

发布于 2010-07-09 10:05:16

这在PHP中目前是不可能的...

而不做傻事。

如果对象的每个实例都是一个引用,并且可以在$GLOBALS中找到这些引用,并且对象知道其中每个实例的名称,那么您可以用新对象替换旧对象的每个引用。外面的世界不会知道其中的区别。

然而,这是一个非常糟糕的想法。使用__call魔法可能是实现目标的最不疯狂的方法。

编辑:总是有runkit,它可以让你做一些事情,比如在类中添加和删除方法。然而,它是一个PECL扩展,甚至可能无法正常工作……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3208957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档