以. login()
_class Account
class Account {
/* Class variables */
public function login() {
if(isset($_POST['username']) && isset($_POST['password']))
return $this->_formLogin();
else if(isset($_SESSION['accountId']))
return $this->_sessionLogin();
else if(isset($_COOKIE['username']) && isset($_COOKIE['password']))
return $this->_cookieLogin();
else return false;
}
private function _formLogin() {
//perform login actions using $_POST data
}
/* All that other stuff */
}
试着暂时忽略对数据清理、密码加盐等看不见的方法的任何担忧。专注于login()
,这个全球访问是坏juju吗?我通常避免在类中使用 PHP 超级全局变量,但我想不出在这种情况下不这样做的充分理由。
我可以理解为什么您不希望在跨类交互的全局变量中出现后台魔术,但是这些全局变量是内置在 PHP 中的,不会被类修改,并且仅由此类使用。
这将导致在您需要用户登录的页面的开头:
$user = new Account($whatever, $objects, $we, $depend, $on);
if($user->login()) {
//Do this stuff when logged in
}
而不是在每个页面上都这样做,其逻辑可能需要稍后更改:
$user = new Account($whatever, $objects, $we, $depend, $on);
if(isset($_POST['username']) && isset($_POST['password']))
$user->formLogin($_POST['username'], $_POST['password']);
else if(isset($_SESSION['accountId']))
$user->sessionLogin($_SESSION['accountId']);
else if(isset($_COOKIE['username']) && isset($_COOKIE['password']))
$user->cookieLogin($_COOKIE['username'], $_COOKIE['password']);
if($user->isLoggedIn() {
//Do this stuff when logged in
}
虽然我知道在类之外创建一个函数来处理它是一种选择,但这不会和在类中混淆全局变量一样糟糕吗?