Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨越到php oop_Php_Oop - Fatal编程技术网

跨越到php oop

跨越到php oop,php,oop,Php,Oop,到目前为止,语法不是问题,但我的问题更多的是关于更好地理解OOP 我正在创建一个名为“user”的类,它应该描述一个用户。通常,这样的类将设置用户变量并检索它们 该类是否也有一个方法来登录新用户? 登录怎么样 如果不是的话,我将如何构建它 “注册”应该是另一门课吗?在这种情况下,生成的对象不是“用户” 登录类也是如此 对不起,诺维斯的问题…我只是想绕着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类。然后,您将在“注册”控制器方法中使用该类的实例来保持控制器的紧凑性-控制器负责决定需要做什么,而不一定要做什么,这取决于您的逻辑有多复杂。