我在PHP中有一个MyObject
类型的对象。
$myObject instanceof MyObject
现在,在class MyObject
中,有一个非静态函数,在那里,我使用对“me”的引用,如$this
,但我还有另一个对象。< / p>
是否可以在不执行$this = $myObject
的情况下实现或多或少相同的效果,例如排序set_object_vars($this, get_object_vars($myObject))
?
答案 0 :(得分:48)
<?php
class MyObject
{
public function import(MyObject $object)
{
foreach (get_object_vars($object) as $key => $value) {
$this->$key = $value;
}
}
}
我想你会做什么,但你应该注意以下几点:
get_object_vars
只会找到非静态属性get_object_vars
只会根据范围 根据范围部分非常重要,可能需要更多解释。您是否知道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;
}
}
}
不同之处在于您可以传递普通数组(哈希表)以及对象。在示例中考虑来自数据库的一些数据。