我对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信息传递给类并且其中一个POSTS什么都不包含它就会出错。
答案 0 :(得分:2)
我认为你的post语法有问题。
if(isset($_POST['username']) && isset($_POST['password'])){
$login->login($_POST['username'],$_POST['password']);
}
使用AND ..所以如果存在用户名和密码,则调用login函数()
答案 1 :(得分:0)
我不确定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();
}
答案 2 :(得分:0)
我知道我可能会提出这个建议,但我赞成静态方法来做这样的事情。 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
)
答案 3 :(得分:-2)
您可以使用错误抑制,如下所示:
$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));