我正在试图弄清楚如何正确地解决这个问题。我不知道我是否正确应用了东西。我认为将User对象与数据库操作分开是一件好事,这意味着User类不应该知道如何使用DB。这就是为什么我创建另一个类UserModel(我不知道如何命名这个类),这将是处理数据库查询并返回其结果的类。以前,我在User类中选择,插入,更新和删除,但我觉得责任不属于那个类。为什么用户应该返回一组用户?这对我来说没有意义。 我在使用数据库时也有疑问,因为我不知道如何正确使用PDO。
(在这个例子中,我只实现了Insert查询,其他方法以相同的方式实现。)
让我们开始吧。
user.php的
class User {
private $id;
private $name;
private $email;
private $username;
private $password;
//Getters & Setters
}
UserModel.php(这应该叫做UserModel吗?)
class UserModel {
private $db;
private $pdo;
public function __construct()
{
$db = new Database;
$pdo = $db->getPDO();
}
public function createUser($user)
{
$sql = 'INSERT INTO users (`name`,`email`,`username`,`password`) VALUES(:name, :email, :username, :password)';
$pdo->prepare($sql);
$pdo->bindValue(':name', $user->getName(), PDO::PARAM_STR);
$pdo->bindValue(':email', $user->getEmail(), PDO::PARAM_STR);
$pdo->bindValue(':username', $user->getUsername(), PDO::PARAM_STR);
$pdo->bindValue(':password', $user->getPassword(), PDO::PARAM_STR);
return $pdo->execute();
//return true if inserted, return false if not
}
public function editUser($user)
{
}
public function deleteUser($uid)
{
}
public function getUser($uid)
{
}
public function getAllUsers()
{
}
}
database.php中
class Database {
private $pdo;
public function __construct()
{
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
}
public function getPdo() {
return $this->pdo;
}
}
users.php
$usermodel = new UserModel;
$user = new User;
$user->setName('John');
$user->setEmail('john@john.com');
$user->setUsername('john');
$user->setPassword('1234');
$usermodel->createUser($user);
答案 0 :(得分:0)
作为基于自定义的用户模型解决方案,对我来说很好看。这些工作对于小型项目来说非常棒,因为它们非常轻巧,您可以根据自己的喜好自定义每个项目。
随着您的扩展,您会注意到必须为每个数据库表完成/自定义,如果您有加入......事情可能会变得毛茸茸,至少可以说。
我建议你看一下主要php框架中使用的ORM:zend,laravel,cake等等。
ORM基本上根据表名/主键进行自动映射。假设你对某些魔法'如果没有对数据输入和数据输出的完全控制,您将通过设置我提到的两个默认值,为您添加的任何其他表中的用户对象创建相同的能力。
缺点是你的体验会受到影响。这里有一些关于我提到的框架的行数/文件数的统计数据: