如何将PHP对象复制到不同的对象类型
新类是原始对象的子类如何将PHP对象复制到不同的对象类型,php,oop,Php,Oop,新类是原始对象的子类 它需要与php4兼容 我想你会发明某种“复制构造函数”。然后,您只需在传递原始对象的同时创建一个新的子类对象。最好的方法是在子类上创建一个克隆方法,以便您可以执行以下操作: $myvar = $subclass->clone($originalObject) 或者,听起来您可以查看decorator模式,您可以将类实例化为空,然后由任意数量的方法加载。其中一个方法可以接受父类的实例作为参数,然后从中复制其数据 class childClass extends par
我想你会发明某种“复制构造函数”。然后,您只需在传递原始对象的同时创建一个新的子类对象。最好的方法是在子类上创建一个克隆方法,以便您可以执行以下操作:
$myvar = $subclass->clone($originalObject)
或者,听起来您可以查看decorator模式,您可以将类实例化为空,然后由任意数量的方法加载。其中一个方法可以接受父类的实例作为参数,然后从中复制其数据
class childClass extends parentClass
{
function childClass()
{
//do nothing
}
function loadFromParentObj( $parentObj )
{
$this->a = $parentObj->a;
$this->b = $parentObj->b;
$this->c = $parentObj->c;
}
};
$myParent = new parentClass();
$myChild = new childClass();
$myChild->loadFromParentObj( $myParent );
php对象与数组没有太大区别,因为所有php 4对象变量都是公共的,所以您可以做一些像这样的事情:
function clone($object, $class)
{
$new = new $class();
foreach ($object as $key => $value)
{
$new->$key = $value;
}
return $new;
}
$mySubclassObject = clone($myObject, 'mySubclass');
它不漂亮,它的本质不是我认为是好的实践,但它是可重用的,它是相当整洁的。
你可以用一些黑魔法来做,虽然我会严肃地质疑<强>为什么你首先有这个要求。这表明您的设计存在严重错误 尽管如此:function change_class($object, $new_class) {
preg_match('~^O:[0-9]+:"[^"]+":(.+)$~', serialize($object), $matches);
return unserialize(sprintf('O:%s:"%s":%s', strlen($new_class), $new_class, $matches[1]));
}
这与serialize通常受到相同的限制,这意味着对其他对象或资源的引用将丢失。这是我目前的解决方案。我想我不能指望有其他魔法能做到这一点。