跨越到php oop
到目前为止,语法不是问题,但我的问题更多的是关于更好地理解OOP 我正在创建一个名为“user”的类,它应该描述一个用户。通常,这样的类将设置用户变量并检索它们 该类是否也有一个方法来登录新用户? 登录怎么样 如果不是的话,我将如何构建它 “注册”应该是另一门课吗?在这种情况下,生成的对象不是“用户” 登录类也是如此 对不起,诺维斯的问题…我只是想绕着OOP转跨越到php oop,php,oop,Php,Oop,到目前为止,语法不是问题,但我的问题更多的是关于更好地理解OOP 我正在创建一个名为“user”的类,它应该描述一个用户。通常,这样的类将设置用户变量并检索它们 该类是否也有一个方法来登录新用户? 登录怎么样 如果不是的话,我将如何构建它 “注册”应该是另一门课吗?在这种情况下,生成的对象不是“用户” 登录类也是如此 对不起,诺维斯的问题…我只是想绕着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的好文章:我是否正确地假设这些方法“save”和“find”也在同一个UserController类中?对不起,我应该更清楚地说明这一点。在上面的示例中,它们存在于用户类上。不一定是这样;您可以说上面的示例是一种“活动记录”(googleit)方法,其中类包含与数据库表交互的方法。它们在User类上比在UserController上更好的原因是您可能希望在应用程序的其他地方调用它们。如果你看看MVC是如何在CakePHP或Symfony这样的框架中处理的,这应该是有道理的。不用担心。正如Oswald在回答中所说,您可能会发现,在编写代码时,您会注意到它本身属于一个类,例如,拥有一个实际进行注册的UserRegistration类。然后,您将在“注册”控制器方法中使用该类的实例来保持控制器的紧凑性-控制器负责决定需要做什么,而不一定要做什么,这取决于您的逻辑有多复杂。