使用PDO :: FETCH_CLASSTYPE传递构造函数参数

时间:2011-07-13 22:08:47

标签: php pdo

我正在用新的基于PDO的版本替换我的旧数据库层。

但是我遇到了一个问题:

使用fetchObject获取对象时,我可以传递对象构造函数的参数。

但是我现在正在移植一个有几个子类的类,它们都存储在同一个表中,我想使用FETCH_CLASSTYPE。这意味着我必须使用我不能传递构造函数参数的常规fetch()方法。

还有其他办法吗?

我可以将构造函数重命名为其他东西并手动调用它,但我想要一个干净的解决方案。

3 个答案:

答案 0 :(得分:0)

似乎没有内置解决方案。无论如何,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);
}

答案 1 :(得分:0)

我认为在获取后立即在返回的实例上调用初始化方法非常简洁。

答案 2 :(得分:0)

这是一个报告为#62567

的PHP错误

您可以通过将任何具有构造函数的类名称作为第二个参数传递来解决它。