跨越到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
答
类不一定代表您的经验的实体。有时它们代表一个概念:
- 注册用户实际上是用户管理的工作。考虑代表用户管理的类。
- 登录是身份验证组件的工作。考虑一个代表认证组件的类。
这些只是一些例子,他们可能不会告诉你为什么它经常这样做的原因。为此,我建议关于面向对象编程的文献。那些文献应该告诉你关于问题的分离,失去耦合,打开/关闭原则,针对接口编程,如何将需求转换为类。
我是正确的假设,这些方法“拯救”与“发现”是在同一个UserController类也? – salmane 2011-03-21 00:23:34
对不起,我应该说得更清楚。在上面的例子中,它们存在于用户类中。情况并非一定如此;你可以说上面的例子是一个'Active Record'(谷歌它)的方法,其中类包含与数据库表交互的方法。他们在User类上比在UserController上更好的原因是,你可能想在应用程序的其他地方调用它们。如果你看看在CakePHP或Symfony这样的框架中如何处理MVC,它应该是合理的。 – Craig 2011-03-21 13:36:19
谢谢Craig – salmane 2011-03-21 18:15:45