Похоже, что при использовании PDO :: FETCH_CLASS не существует способа сделать PDO для создания нового объекта с помощью конструктора/сеттера.Есть ли причина, почему PDO не имеет возможности создавать объекты через конструктор с FETCH_CLASS?
В настоящее время с FETCH_CLASS переменные-члены заполняются с использованием отражения, я думаю. Они, конечно, не передаются через конструктора. Это бесполезно, потому что оно обходит любые проверки, которые могут возникнуть у вашего конструктора, чтобы обеспечить согласованность объекта (задача не может иметь статус $ status = завершена, а не имеет установленный набор $ finalDate).
Существуют различные варианты, некоторые из которых относятся к особенностям с очень краем (например, PDO :: FETCH_NAMED). Это приводит меня к предположению, что создание конструктора не реализовано, потому что есть некоторая причина, почему это не очень хорошая идея.
Примечание: Я не ищу третий аргумент fetchAll (ctor_args), который не пропускает значения строки, а скорее предоставленные.
Обновление: Кажется, что я не был ясен в описании того, что я прошу. Представьте себе, у меня есть конструктор, как это:
public function __construct($id, $number) {
if ($id == $number) {
throw new InvalidArgumentException("Number and ID can't be same");
}
}
и сделать
SELECT id, number FROM table
С любыми настройками, даже $st->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Foo');
не будет сгенерировано исключение и счастливо создать объект в неопределенном состоянии. Поскольку значения не задаются с помощью конструктора. На самом деле ближе приближение того, что я назвал бы ожидаемое поведение было бы то, что упоминается в https://stackoverflow.com/a/33027392/112000
Update: Я создал запрос функции для этого https://bugs.php.net/bug.php?id=73397 только в случае, если вы заинтересованы в нем, как хорошо.
Я думаю, что это может помочь вам: HTTP: // StackOverflow.com/questions/8898794/using-pdofetch-class-with-magic-methods – Roman