将用户存储为对象是否有意义?

时间:2013-01-06 00:44:07

标签: php mysql oop login

这个问题可能听起来很奇怪,但是我的一个项目有一个简单的基于会话的登录系统(PHP + MySQL),我想知道将用户存储在一个对象中是否有意义。我可以想象这样的情况,这样做可能有用,但......我真的不知道。如果让我们说一个微博系统会有区别吗?

我认为可以定义一个User类,从MySQL表加载属性,它可以有getUserName()logOut()addPost()等方法/函数

我问自己这个问题的首要原因是,我没有一个关于如何将对象传递给会话的线索,而且所有这些面向对象的东西对我来说也有点新意。我不完全确定何时与OOP思考,何时不思考。

如果你可以就这个话题或任何有用的东西给我一些建议,那将非常有帮助。谢谢! :)

3 个答案:

答案 0 :(得分:3)

由于PHP 5.3 / 5.4中的对象没有明显的开销,我建议你为所有东西编写面向对象的代码,除了在键盘中进行简单的实验。

对于身份验证系统,我将其分为两部分:

以下是一个简单的API示例,您可以尝试将其用作代码的基础:

$user = new User;
$mapper = new UserMapper( $pdo );

$user->setName( $_POST['username'] );
$mapper->fetch( $user ); 

if ( $user->isAvailable() && $user->matchPassword( $_POST['password'] ))
{
    $user->setLastLogin( time() );
    // here you put interaction with session
}
else
{
    $user->addFailedAttempt();
    if ( $user->getAttempts() >= 5 )
    {
        $user->setStatus( User::STATUS_LOCKED );
    }
}

$mapper->store( $user );

您必须了解OOP的目标是代码的可维护性和可读性。我假设您可以弄清楚该代码中发生了什么,而没有看到每种方法的确切实现。

答案 1 :(得分:0)

使用类将使您的代码更易读,更容易更改/修改/升级。它也会减少代码大小。但是你也可以在没有类或OOP的情况下定义php文件中的函数,只需要函数并在每次需要时包含它们。如果使用类,将更容易在整个Web应用程序之间传递数据,整个用户对象将作为对象。类对性能没有任何影响。这就是我现在要说的全部。

答案 2 :(得分:0)

首先回答你的问题:我只会存储在数据库中查找用户所需的那些信息。如果您可以通过数据库加载它,您也可以为每个请求实例化一个新的用户对象,我认为这更好,因为数据可能会更改,如果用户数据发生更改,您必须更新数据库和会话。因此,从数据库加载您的用户并在每个请求上创建一个实例。

第二:看一下像doctrine2或类似的某种orm(对象 - 关系 - 映射系统)。这些系统完全符合您的用户对象。