аргументы конструктора pass using PDO :: FETCH_CLASSTYPE

Я заменяю свой старый уровень базы данных новой версией на основе PDO.

Однако я столкнулся с проблемой:

При извлечении объектов с помощью fetchObject я могу передать аргументы для конструктора объектов.

Однако теперь я переношу на класс, который имеет несколько подклассов, все они хранятся в одной таблице, и я хочу использовать 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); } с $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, указанная как # 62567

Вы можете обойти это, передав в качестве второго аргумента любое имя класса с конструктором