-1

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

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

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];
  }
}

你怎么看?有更好的变种吗?你更喜欢什么?

4

2 回答 2

0

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

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

if ($row = mysql_fetch_assoc($res))
    $obj = (object)$row;
于 2013-09-20T00:13:07.853 回答
0

有点不清楚你在问什么。如果您从“我必须用 db 中的数据填充对象”开始,那么显而易见的答案是“这样做。使用数据库接口库,它会为您构建它们”,工作完成,您不需要任何工作。

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

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

于 2013-09-19T23:51:52.163 回答