この質問は、すでにここで尋ねられている質問と非常によく似ています: PDO using PDO::FETCH_PROPS_LATE and __construct() call?
ただし、その質問で受け入れられた回答は、フェッチされた値をクラスのコンストラクターに渡す方法に実際には答えていません。縮小されたコードを次に示します。
<?php
class Course {
private $name;
private $code;
private $prerequisites;
public function __construct($name, $code) {
if(!is_string($code) || mb_strlen($code) !== 7) {
throw new \InvalidArgumentException('Invalid code.');
}
$this->name = $name;
$this->code = $code;
$this->prerequisites = array();
}
public static function getAllCourses() {
$sql = 'SELECT `name`, `code` FROM `courses` ORDER BY `code`;';
$db = new \PDO(' ... ', DB_USER, DB_PASS);
$stmt = $db->query($sql);
$stmt->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, 'Course', array('name', 'code'));
return $stmt->fetchAll();
}
}
?>
このコードの問題は、リテラル文字列 "name" と "code" がコンストラクターに渡されることです。ただし、名前とコードの実際の値をコンストラクターに渡したいと思います (明らかに)。
これはできますか?はいの場合、どのように?bindColumn()を使用しますか?