【问题标题】:pass constructor arguments using PDO::FETCH_CLASSTYPE使用 PDO::FETCH_CLASSTYPE 传递构造函数参数
【发布时间】:2011-07-13 22:08:47
【问题描述】:

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

但是我遇到了一个问题:

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

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

还有其他方法吗?

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

【问题讨论】:

    标签: php pdo


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这是一个 PHP 错误报告为#62567

        您可以通过使用构造函数传递任何类名作为第二个参数来解决它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-13
          • 1970-01-01
          • 1970-01-01
          • 2011-09-05
          • 1970-01-01
          相关资源
          最近更新 更多