跨越到PHP OOP

问题描述:

到目前为止语法是没有问题的,但我的问题是更多更好地了解OOP跨越到PHP OOP

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

该类是否也有注册新用户的方法? 如何登录?

如果不是..我会如何构造它?

应该“注册”是另一类吗?在这种情况下,不会生成的对象是一个“用户”

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

抱歉NOVIS问题....只是想换我周围OOP头。

感谢您的帮助:)

大多数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

+0

我是正确的假设,这些方法“拯救”与“发现”是在同一个UserController类也? – salmane 2011-03-21 00:23:34

+0

对不起,我应该说得更清楚。在上面的例子中,它们存在于用户类中。情况并非一定如此;你可以说上面的例子是一个'Active Record'(谷歌它)的方法,其中类包含与数据库表交互的方法。他们在User类上比在UserController上更好的原因是,你可能想在应用程序的其他地方调用它们。如果你看看在CakePHP或Symfony这样的框架中如何处理MVC,它应该是合理的。 – Craig 2011-03-21 13:36:19

+0

谢谢Craig – salmane 2011-03-21 18:15:45

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

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

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