我将在这里大大缩短实际代码以使其快速。我已经拿出了大量的支票和其他东西,只是为了让它更容易理解。
这是我的用户类:
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 来获取 userdata,以便 DAO 对象在每次需要获取用户数据时都不需要依赖 User 类的实例,因为任何 userId 都可以在方法签名中提供?
谢谢。