PDO с использованием вызовов PDO :: FETCH_PROPS_LATE и __construct ()?

Я пытаюсь создать новый экземпляр объекта Setting вызывающего __construct() с PHP PDO и ограничить PDO :: FETCH_PROPS_LATE . К несчастью, я получаю это предупреждение (и привязка не работает).

Как передать значения столбца методу конструктора?

Предупреждение: Отсутствует аргумент 1 для параметра :: __ construct () в pdo.php.

Примечание. Неопределенная переменная: ключ в pdo.php.

 class Setting { protected $key, $value, $displayable; public function __construct($key, $value = null, $displayable = 1) { $this->key = $key; $this->value = $value; $this->displayable = $displayable > 0; } } while($mashup = current($mashups)) { $stmt = $dbh->prepare('SELECT `key`, value, displayable FROM setting WHERE mashup_id = :id'); $stmt->bindParam(':id', $mashup->id, PDO::PARAM_INT); $stmt->execute(); $settings = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Setting'); } $stmt->closeCursor(); 

У вашего конструктора есть необязательный параметр $key :

 public function __construct($key, $value = null, $displayable = 1) 

Итак, когда вы это делаете:

 $settings = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,'Setting'); 

Ошибка: warning: Missing argument 1 for Setting::__construct() in pdo.php вызывается только для параметра $key потому что он не дефолт.

Правильное использование fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,... выглядит следующим образом:

 $variable = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'classname', <array of parameter names(in order) used in constructor>); 

Итак, в вашем случае:

 $variable = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Setting', array('key', 'value', 'displayable');