如果我有一个扩展类 Bar 的类 Foo 和一个 Bar 实例,是否可以使用该 Bar 实例来“填充”一个新的 Foo 实例?
基本上,我只能检索 Bar,但我想在我的代码中使用 Foo,因为它为我提供了很多额外的方法。
我看到很多类似问题的解决方案,但它们似乎都是 python 或 c#。
我无法使用 ReflectionClass::newInstanceArgs,因为我无法访问首先进入 Bar 的构造函数以创建它的数据。
最佳答案
完成此操作的推荐方法是通过 dependency injection . Foo
的构造函数可以接受 Bar
的实例,然后您必须编写代码来加载新的 Foo
的状态Bar
对象中的对象。
如果 PHP 具有完全符合您描述的功能,那将是有问题的,因为即使 Foo
扩展了 Bar
,这两个类仍然可能非常不同。我不明白 PHP 是如何聪明到知道如何自动将一个类的实例转换为另一个类的实例。
话虽如此,在正确的情况下,下面的(非常老套的)“解决方案”可以满足您的描述。我不建议实际使用它。我主要只是想表明您必须求助于一些奇怪的东西才能做到这一点。
function convertObject($object, $newClass)
{
return unserialize(
preg_replace(
'/^O\:\d+\:"[^"]+"/',
'O:'.strlen($newClass).':"'.$newClass.'"',
serialize($object)
)
);
}
关于php - 在 PHP 中,从基类的实例创建扩展类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708243/