我在 PHP 中有一个对象,类型为MyObject
.
$myObject instanceof MyObject
现在,在 中class MyObject
,有一个非静态函数,在那里,我使用对“我”的引用,比如$this
,但那里还有另一个对象。
是否有可能在不做的情况下$this = $myObject
达到或多或少相同的效果,比如类似的东西set_object_vars($this, get_object_vars($myObject))
?
我在 PHP 中有一个对象,类型为MyObject
.
$myObject instanceof MyObject
现在,在 中class MyObject
,有一个非静态函数,在那里,我使用对“我”的引用,比如$this
,但那里还有另一个对象。
是否有可能在不做的情况下$this = $myObject
达到或多或少相同的效果,比如类似的东西set_object_vars($this, get_object_vars($myObject))
?
<?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
属性 in MyObject
,get_object_vars
将会看到它,因为您在一个MyObject
类的实例中。如果您尝试导入另一个类的实例,这显然不起作用。
@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;
}
}
}
不同之处在于您可以传递一个普通数组(哈希表)以及一个对象。想想一些来自数据库的数据的例子。