OO PHP |正确传递POST参数


OO PHP | Properly Passing POST Paramaters

我是OO PHP的新手,我正在尝试创建一个登录类。我遇到的问题是,我想传递POST值用户名和密码到我的类,但我不能建立一个体面的方式这样做。

下面的

是我的类

的一个片段
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
    }
}

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

$login = new PortalLogin();
if(isset($_POST['username'])){
    if(isset($_POST['password'])){
        $login->login($_POST[username],$_POST[password]);
    } else {
        //throw error
    }
} else {
    //throw error
}

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

我认为你对post的语法有问题。

if(isset($_POST['username']) && isset($_POST['password'])){
 $login->login($_POST['username'],$_POST['password']);
}

使用和. .如果用户名和密码都存在那么调用login函数()

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

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

如果变量在POST数据中不存在,你的post()方法可以返回一个默认值(null)。

你可以有一个类来检查你的用户基于这些变量:

$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将有用户名/密码检查烘焙到User类。(可能是User::checkLoginCredentials($u, $p); // boolean yup/nope)

可以使用错误抑制,如下所示:

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

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

更多信息,请查看:http://php.net/manual/en/language.operators.errorcontrol.php

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

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