PHP 将所有对象属性复制到此

2022-08-30 19:30:30

我在PHP中有一个对象,类型为.MyObject

$myObject instanceof MyObject

现在,在 中,有一个非静态函数,在那里,我使用对“me”的引用,如,但我在那里还有另一个对象。class MyObject$this

有没有可能,不做,达到或多或少相同的效果,就像这样的东西?$this = $myObjectset_object_vars($this, get_object_vars($myObject))


答案 1
<?php

class MyObject
{
    public function import(MyObject $object)
    {   
        foreach (get_object_vars($object) as $key => $value) {
            $this->$key = $value;
        }
    }   
}

我猜会做你想做的事,但你应该注意以下几点:

  1. get_object_vars只会找到非静态属性
  2. get_object_vars将仅根据范围查找可访问的属性

根据范围部分非常重要,可能值得更多解释。您是否知道在 PHP 中,属性范围与类相关,而不是与实例相关

这意味着在上面的示例中,如果您在 中有一个属性,则会看到它,因为您位于类的实例中。如果您尝试导入另一个类的实例,这显然不起作用。private $barMyObjectget_object_varsMyObject


答案 2

@Geoffrey巴切莱特,我们可以改进这一点:

class MyObject
{
    //object or array as parameter
    public function import($object)
    {   
        $vars=is_object($object)?get_object_vars($object):$object;
        if(!is_array($vars)) throw Exception('no props to import into the object!');
        foreach ($vars as $key => $value) {
            $this->$key = $value;
        }
    }   
}

不同之处在于,您可以传递普通数组(hashtable)以及对象。例如,考虑一下来自数据库的一些数据。


推荐