越过php oop

时间:2011-03-20 23:32:17

标签: php oop

到目前为止,语法不是问题,但我的问题更多是关于更好地理解OOP

我正在创建一个名为“user”的类,它应该描述用户。通常这样的类会设置用户变量并检索它们

该类是否也有注册新用户的方法? 登录怎么样?

如果没有..我会如何构建它?

应该“注册”成为另一个班级吗?在这种情况下,结果对象不是“用户”

同样适用于登录类......

对于novis问题感到抱歉....只是试图绕过OOP。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:4)

类不一定代表您体验中的实体。有时他们代表一个概念:

  • 注册用户实际上是用户管理的工作。考虑一个代表用户管理的类。
  • 登录是身份验证组件的工作。考虑一个代表身份验证组件的类。

论文只是一些例子,他们可能没有告诉你为什么经常这样做的原因。为此我建议有关面向对象编程的文献。这些文献应该告诉你关注点分离,失去耦合,开放/关闭原则,对接口编程,如何将需求转换为类。

答案 1 :(得分:3)

大多数PHP OOP应用程序将使用模型 - 视图 - 控制器(MVC)方法来解决此问题,您的用户类是“模型”和“控制器”类,提供与您的用户类交互的业务逻辑,如'注册或登录'。 “视图”部分指的是输出到浏览器的表示代码(PHP / HTML的混合)。

控制器方法看起来像这样:

class UserController {

    public function signup($userDetails) {
        // create a new user
        $user = new User();
        $user->name = $userDetails['name'];
        $user->username = $userDetails['username'];
        $user->password = $userDetails['password'];
        $user->save(); // Save to database, for example
    }

    public function login($username, $password) {
        // check the user exists and log them in
        $user = new User();

        // query database for a user with these credentials, for example
        if($id = $user->find($username, $password)) {
            $_SESSION['user'] = $id; // Save the ID to the session for future use
            return true;
        }

        return false;
    }

}

这只是一个非常基本的示例,但通常您不希望将您的应用程序逻辑(诸如登录或注册之类的操作)与您的域逻辑混合(这应该只涉及管理您的数据)。

可以在这里找到关于PHP中MVC的好文章:http://oreilly.com/php/archive/mvc-intro.html