用数据填充对象

时间:2013-09-19 16:45:47

标签: php reflection data-structures

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

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

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];
  }
}
你怎么看?有更好的变种吗?你更喜欢什么?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

$res = mysql_query("SELECT id, name, whatever, data1, data2, data3 FROM mytable");

if ($row = mysql_fetch_assoc($res))
    $obj = (object)$row;