私が望むのは、データがデータベースに含まれるオブジェクト (つまりユーザー) のグループを持つシステムの理想的なフレームワークを確認することです。User クラスと UserMapper クラスを用意するようにアドバイスされましたが、これがどのように見えるべきかについての私の理解です。
user.class.php
/* The class for constructing any user's information
*/
class User {
protected $userId, $email, $userGroup;
protected function getEmail() {
return $this->email;
}
protected function getUserId() {
return $this->userId;
}
public function __construct($userId, $email, $userGroup) {
$this->userId = $userId;
$this->email = $email;
$this->userGroup = $userGroup;
}
}
class UserMapper {
// database connection
private $db;
public function __construct($db)
{
$this->db = $db;
}
public function findByUserId ($userId) {
$userObject = new User();
$q = $this->db->prepare("SELECT userId, email, userGroup FROM user WHERE userId = :userId");
$q->bindValue(":userId", $id);
$q->setFetchMode( PDO::FETCH_INTO, $userObject);
$q->execute();
$q->fetch(PDO::FETCH_INTO);
return $userObject;
}
}
?>
main.php
<?php
include user.class.php;
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true));
$getUser = new UserMapper($dbh);
$user = $getUser->findByUserId(41);
echo $user->getEmail();
?>
しかし、これは main.php 側に関しては少し面倒です。1 つの PDO オブジェクトを作成して、それをすべてのスクリプトで定義することはできませんか? UserMapper オブジェクトと同様に? または、データベースからユーザーを取得するたびに、新しい userMapper オブジェクトを作成してから、findByUserId (上記のように) を実行する必要があります。または、これを行うためのより簡単な方法はありますか?
クラス User 内で UserGroup オブジェクトを呼び出したい場合、どのようにすればよいでしょうか? (これは、PDO を介してデータベースに接続する必要もあります)。以下を行うのは面倒に思えます:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true));
$getUserGroup = new UserGroupMapper($dbh);
$userGroup = $getUserGroupMapper->findByUserId($this->userGroup);
?>