![]() |
1
9
如其他答案所述,你可以用下流的 PECL扩展。 不过,你真的不想要。任何你想在OOP中解决的问题都有一个符合OOP的方法。 运行时类型层次结构修改不符合OOP(事实上,这是有意识地避免的)。有些设计模式应该符合您的要求。
|
![]() |
2
35
在PHP中,转换以更改对象的类型是不可能的(没有使用讨厌的扩展)。一旦你实例化了一个对象,你就不能再改变类(或其他实现细节)了。。。 您可以使用如下方法模拟它:
但要注意的是,它实际上并没有改变原来的类。它只是创造了一个新的。注意,这需要属性是公共的,或者有getter和setter魔术方法。。。
好吧,既然Gordon发布了一个非常黑的魔法解决方案,我也会这么做(使用 RunKit PECL扩展(警告: ):
所以,与其这么做
从类内(只要它是用
免责声明:不要这样做。真的,不要。这是可能的,但这是个可怕的主意。。。 |
![]() |
3
12
重新定义类 你可以用 runkit PECL extension 又称“地狱工具箱”:
重新定义实例
runkit函数在对象实例上不起作用。如果您想在对象实例上这样做,理论上可以通过处理序列化的对象字符串来实现。
下面的代码允许您将实例更改为任何其他类:
结果:
免责声明:我绝对不鼓励任何人在生产中使用这些解决方案。 |
![]() |
4
2
这是不可能的,因为虽然子类的实例也是父类的实例,但反之亦然。
您可以创建子类的新实例,并将旧对象中的值复制到该实例上。然后,您可以返回类型为
|
![]() |
5
1
对于简单的类,这可能有效(我在一些罕见的情况下成功地使用了此功能):
在我的案例中的用法:
当然
|
![]() |
Jacco · 未能格式化我的日期以在php中正确工作 1 年前 |
![]() |
jay ram · 如何在URL核心php中从API获取JSON? 1 年前 |
|
Ishwarya A · php电子表格在浏览器中显示多张excel 1 年前 |