用数据填充对象


Fill object with data

我必须用数据库中的数据填充对象。我有两个想法如何简单快速地做到这一点:

使用反射(按行键名称设置子属性)

class Base
{
    public function SetElementByRow($row) 
    {
        foreach($row as $key=> $val)
        {
            $ref_class = new 'ReflectionClass($this);
            $ref_class->getProperty($key)->setValue($val);
        }
    }
}

按字符串获取属性

class Base
{
   protected $_row;
   public function SetElementByRow($row) 
   {
       $this->_row = $row;
   }
  public function GetPropByKey($key)
  {
      return $this->_row[$key];
  }
}

你觉得怎么样?有更好的变体吗?你更喜欢什么?

有点

不清楚你在问什么。如果你从"我必须用来自数据库的数据填充对象"开始,那么显而易见的答案是"所以这样做。使用数据库接口库,它将为您构建它们",工作完成,您无需任何工作。

如果你想知道什么是通用键/值存储的好类定义,这就是你的问题后续问题:你的第一个代码块非常荒谬,请不要使用它(为什么要使用反射?如果您不知道,请不要使用它)。你的第二个例子是一个完全正常的类。

但是,这些代码块都与从数据库结果中获取对象中的数据无关。

不清楚你在问什么。您想创建一个对象,其属性包含从数据库中读取的内容?它必须是特定类还是只是标准对象?因为 PHP 支持直接数组到对象的转换,所以做最后一种情况就很容易了。

$res = mysql_query("SELECT id, name, whatever, data1, data2, data3 FROM mytable");
if ($row = mysql_fetch_assoc($res))
    $obj = (object)$row;