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
)
我对 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
)