以class Account
爲例login()
函數。你認爲它在PHP中使用類方法訪問超類全局變得很糟糕嗎?
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 */
}
試試這個時刻忽略任何關於數據清理,密碼salting等方法的擔憂。嚴格專注於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
}
雖然我知道在類的外部創建一個函數來處理這個問題是一個選項,但是這不會像在一個類中混淆全局變量一樣糟糕嗎?
所以這個問題只是你在跟自己說話嗎? – cletus 2009-04-12 23:19:17
@cletus常見問題解答告訴您使用答案表單將您的答案發布到自己的問題中,而不是放在您的問題中。如果它陷入低谷,我會知道我錯了,而且全局變量給了我一個噁心的感覺,我需要某種安慰我所做的是對的。 – 2009-04-12 23:25:33