“将”对象属性“转移”到不同类的对象

时间:2011-05-20 09:44:06

标签: php

我有一个对象是数据库查询的结果,看起来像这样(var_dump输出):

object(stdClass)#17 (6) {
  ["id"]=>
  string(1) "1"
  ["title"]=>
  string(20) "Some Title"
  ["description"]=>
  string(41) "Some really good stuff. Description here."
  ["slug"]=>
  string(19) "some-slug-url"
  ["picture_url"]=>
  NULL
  ["price"]=>
  string(4) "5.99"
}

我只需要将所有属性值“转移”到具有相同属性名称的其他类。有一种简单的方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:2)

看一下PHP的get_object_vars()-function,无需大量的赋值语句即可达到预期的效果:

foreach (get_object_vars($sourceObject) as $name => $value) {
    $destinationObject->$name = $value;
}

您应该确保根据需要为此添加足够的错误检查。

答案 1 :(得分:2)

简单的“故障安全”解决方案

$target = new MyClass;
$target->id = $source->id;
$target->title = $source->title;
// and so on

它的代码更多一点,但好处是

  • 如果$source的某些属性发生变化,您会注意到它(因为它在$target中丢失了)
  • 您可以将$target的属性命名为完全独立于$source
  • 你看,会发生什么