我是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));