将对象属性“传输”到不同类的对象


"Transfer" object properties to object of different class

我有一个对象是数据库查询的结果,看起来像这样(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"
}

我只需要将所有属性值"转移"到具有相同属性名称的不同类。有没有简单的方法可以做到这一点?

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

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

应确保根据需要向其添加足够的错误检查。

简单且"故障安全"的解决方案

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

编码有点多一点,但好处是

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