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

时间:2012-01-03 13:09:31

标签: php properties this assign

我在PHP中有一个MyObject类型的对象。

$myObject instanceof MyObject

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

是否可以在不执行$this = $myObject的情况下实现或多或少相同的效果,例如排序set_object_vars($this, get_object_vars($myObject))

2 个答案:

答案 0 :(得分:48)

<?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只会根据范围
  3. 查找可访问的属性

    根据范围部分非常重要,可能需要更多解释。您是否知道PHP中的属性范围依赖于类而不是依赖于实例

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

答案 1 :(得分:0)

@Geoffrey Bachelet我们可以改进这个:

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

不同之处在于您可以传递普通数组(哈希表)以及对象。在示例中考虑来自数据库的一些数据。