当前位置:  开发笔记 > 编程语言 > 正文

如何将PHP对象复制到不同的对象类型中

如何解决《如何将PHP对象复制到不同的对象类型中》经验,为你挑选了2个好方法。

您可以将类实例化为空,然后通过任意数量的方法加载.其中一个方法可以接受父类的实例作为参数,然后从那里复制其数据

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 );


troelskn.. 5

你可以用一些黑魔法来做到这一点,尽管我会在一开始就严重质疑为什么你有这个要求.它表明您的设计存在严重问题.

但是:

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]));
}

这与一般的序列化具有相同的限制,这意味着对其他对象或资源的引用将丢失.



1> Jurassic_C..:

您可以将类实例化为空,然后通过任意数量的方法加载.其中一个方法可以接受父类的实例作为参数,然后从那里复制其数据

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 );



2> troelskn..:

你可以用一些黑魔法来做到这一点,尽管我会在一开始就严重质疑为什么你有这个要求.它表明您的设计存在严重问题.

但是:

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]));
}

这与一般的序列化具有相同的限制,这意味着对其他对象或资源的引用将丢失.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有