ここでは、簡単にするために、実際のコードを大幅に短縮します。理解しやすくするために、たくさんのチェックやその他のものを取り除いています。
これは私のユーザークラスです:
class User {
private $userId;
private $userDAO;
public function __construct($dbh, $userId) {
$this->userId = (int) $userId;
//Create the UserDAO object
$this->userDAO = new UserDAO($dbh, $this);
//Get the up to date details of the user
$userData = $this->userDAO->getUserData()
}
}
そして、これは私の UserDAO クラスです:
class UserDAO {
private $dbh;
private $user;
public function __construct($dbh, $user) {
$this->dbh = $dbh;
$this->user = $user;
}
public function getUserData() {
$stmt = $this->dbh->prepare("SELECT username FROM " . USERS_TABLE . " WHERE userId = :userId LIMIT 1");
$stmt->bindParam(':userId', $this->user->getUserId(), PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
これは正しい方法ですか?ご覧のとおり、DAO は User クラスのインスタンスからデータベース クエリの変数を取得するため、DAO メソッドは引数を必要としません。
getUserData() メソッドに userId の引数があり、提供された userId を使用してユーザーデータを取得する必要があります。これにより、DAO オブジェクトは、ユーザーデータを取得する必要があるたびに User クラスのインスタンスに依存する必要がなくなります。メソッド署名で提供されますか?
ありがとう。