我正在用一个新的基于PDO的版本替换旧的数据库层。
但是我遇到了一个问题:
当使用fetchObject
获取对象时,i可以传递对象构造函数的参数。
然而,我现在移植了一个类,它有几个子类,都存储在同一个表中,我想使用FETCH_CLASSTYPE
。这意味着我必须使用常规的fetch()
方法,我不能向其传递构造函数参数。
还有别的方法吗?
我可以将构造函数重命名为其他东西并手动调用它,但我想要一个干净的解决方案
似乎没有一个内置的解决方案。API的那部分看起来不太好。您可以使用一个变通方法:
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch()) {
/* "Factory" */
$obj = new $row['class_name_column']('constructor', 'args');
unset($row['class_name_column']);
foreach ($row as $key => $value) {
$obj->$key = $value;
}
var_dump($obj);
}
我认为在获取后立即在返回的实例上调用初始化方法是非常干净的
这是一个PHP bug,报告为#62567
您可以通过将任何带有构造函数