Php 设计更优雅的用户对象

Php 设计更优雅的用户对象,php,Php,我构建了一个用户类,它试图在MySQL数据库中查找用户的ID。如果找到它,它会将变量SQL_ID设置为该值,否则它会将其保留为空 稍后调用的另一个方法(IsValid)返回一个布尔值,告诉我用户是否确实存在 我很好奇是否有其他人愿意在这里评论我的设计,也许可以提供一个更优雅的解决方案。我承认PHP不是我的主要语言,在花了太多时间使用非静态类型的语言之后,我可能觉得有点不习惯。也许我是在验证这个设计是否合理 // User -> class for passing around user i

我构建了一个用户类,它试图在MySQL数据库中查找用户的ID。如果找到它,它会将变量SQL_ID设置为该值,否则它会将其保留为空

稍后调用的另一个方法(IsValid)返回一个布尔值,告诉我用户是否确实存在

我很好奇是否有其他人愿意在这里评论我的设计,也许可以提供一个更优雅的解决方案。我承认PHP不是我的主要语言,在花了太多时间使用非静态类型的语言之后,我可能觉得有点不习惯。也许我是在验证这个设计是否合理

// User -> class for passing around user information. Should only pass around the UserID (a unqiue SQL ID), for security reasons, in a Session object.
    class User {
        private $SQL_ID = "";
        //@todo: Get the User object to actually talk to the other classes. Lol.

        public function __construct($Username, $Password) {
            // Probably want to Base64 encode the values going into and out of the MySQL database, to prevent a SQL Injection attack.
            $query = "SELECT [UserID] FROM [Users] WHERE [Username] = '" . base64_encode($Username) . "' AND [Password] = '" . base64_encode($Password) . "';";
            $data = SQL::DataQuery($query);

            $this->SQL_ID = $data["UserID"];

        }

        // Boolean function to tell us if we have a valid user. Might be able to merge this into the constructor.
        public function IsValid() {
            if($this->SQL_ID == "") {
                return false;
            }

            return true;
        }

        public function GetUserID() {
            return $this->SQL_ID;

        }

        // private $Query = "SELECT [UserID] FROM [Users] WHERE [Username] = '' AND PASSWORD = '';"; // Prototype User query (for selecting a UserID).


    }

我不认为你应该有一个用户对象,除非登录成功。我将使用另一个类(名为Authenticator),该类负责根据数据库检查用户名和密码,并仅在找到有效用户时返回用户对象

我认为除非登录成功,否则不应该有用户对象。我将使用另一个类(名为Authenticator),该类负责根据数据库检查用户名和密码,并仅在找到有效用户时返回用户对象

嗯,我在类构造中没有登录功能。这对我来说似乎很奇怪。嗯,我不会在类构造中使用登录功能。我觉得这很奇怪。