我必须使用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];
}
}
你怎么看?有更好的变种吗?你更喜欢什么?
答案 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;