使用OOP管理用户

时间:2015-03-08 15:17:29

标签: php mysql oop pdo

我正在试图弄清楚如何正确地解决这个问题。我不知道我是否正确应用了东西。我认为将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);

1 个答案:

答案 0 :(得分:0)

作为基于自定义的用户模型解决方案,对我来说很好看。这些工作对于小型项目来说非常棒,因为它们非常轻巧,您可以根据自己的喜好自定义每个项目。

随着您的扩展,您会注意到必须为每个数据库表完成/自定义,如果您有加入......事情可能会变得毛茸茸,至少可以说。

我建议你看一下主要php框架中使用的ORM:zend,laravel,cake等等。

ORM基本上根据表名/主键进行自动映射。假设你对某些魔法'如果没有对数据输入和数据输出的完全控制,您将通过设置我提到的两个默认值,为您添加的任何其他表中的用户对象创建相同的能力。

缺点是你的体验会受到影响。这里有一些关于我提到的框架的行数/文件数的统计数据:

https://stackoverflow.com/questions/28923085/should-i-use-laravel-framework-if-i-use-wordpress/28923187#28923187