OO PHP |正确传递 POST 参数

OO PHP | Properly Passing POST Paramaters

我对 OO 比较陌生 PHP,我正在尝试创建一个登录名 class。 我遇到的问题是我想将 POST 值用户名和密码传递给我的 class 但我无法建立一个合适的方法。

下面是我的 class

的片段
class PortalLogin{
    private $username;
    private $password;

    function __construct(){
        //I connect to DB here
    }

    function login($username, $password){
        //error check the paramaters here
        //then I can run the query
    }

    function __destruct(){
        //I disconnect from DB here
    }
}

以上是我正在创建的 class 的细分,下面是我计划如何执行它(我目前的主要问题)。

$login = new PortalLogin();

if(isset($_POST['username'])){

    if(isset($_POST['password'])){

        $login->login($_POST[username],$_POST[password]);

    } else {

        //throw error

    }

} else {

    //throw error

}

我真的不喜欢上面的代码结构,在我的 class 之外做这么多似乎很乱。如何将 POST 信息传递给 class 并在那里执行检查?我担心如果我将 POST 信息传递给 class 而其中一个 POSTS 不包含任何内容,它将出错。

我认为您对 post..

的语法有疑问
if(isset($_POST['username']) && isset($_POST['password'])){

 $login->login($_POST['username'],$_POST['password']);

}

使用 AND.. 所以如果用户名和密码都存在则调用登录函数 ()

你可以使用错误抑制,像这样:

$login->login(@$_POST['username'], @$_POST['password']);

如果一个或两个值不在 $_POST 变量中,调用该方法时不会出错,因此您可以在 class 方法中进行错误处理。

有关详细信息,请查看: http://php.net/manual/en/language.operators.errorcontrol.php

编辑: 另一种选择是这样做:

$login->login((isset($_POST['username']) ? $_POST['username'] : null), (isset($_POST['password']) ? $_POST['password'] : null));

我不确定 OOP 是从哪里来的,但如果你走面向对象的路线,你会有一个 class 代表一个请求,你可以从中获取 POST数据来自:

$username = $request->post('username');
$password = $request->post('password');

如果 POST 数据中不存在变量,您的 post() 方法可以 return 默认值 (null)。

然后您可以class根据这些变量检查您的用户:

$auth = new AuthService($dbConnection);

if ($auth->checkCredentials($username, $password)) {
    // Valid user
} else {
    $error = $auth->getLastError();
}

我知道我可能是少数人提出这个建议,但我更喜欢用静态方法来处理这样的事情。 PortalLogin代表一个动作而不是数据

class PortalLogin
{
    /**
     * Attempt login
     * @param string $username
     * @param string $password
     */
    public static function login ($username, $password)
    {
        // do your login stuff
    }
}

然后使用你会这样做:

if (isset($_POST['username']
    && !empty($_POST['username']
    && isset($_POST['password']
    && !empty($_POST['password']
) {
    PortalLogin::login($_POST['username'], $_POST['password']);
}

更好的 OO 是将 username/password 检查融入 User class。 (也许 User::checkLoginCredentials($u, $p); // boolean yup/nope