A class Account
içindeki bir örnek login()
fonksiyonu al.
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 */
}
Veri hijyenikleştirmeye, şifre tuzlama, ve böyle görünmeyen yöntemler hakkında herhangi bir endişeniz yok saymak için bu an için deneyin. Kesinlikle konsantre login()
, bu küresel erişim hayra alâmet nedir? Ben normalde sınıflar içinde PHP süper küresellerle kullanmaktan kaçının, ama bu durumda bunu yapmak için iyi bir sebep düşünemiyorum.
Sana büyü-in-the-arka globallerinin sınıflar arasında etkileşim ile ortaya çıkan istemem neden anlayabiliyorum, ancak bu globallerinin PHP yerleşik, sınıfı tarafından değiştirilmiş değildir, ve sadece bu sınıf tarafından kullanılmaktadır.
Bu bir kullanıcı oturum açmış gereken sayfaların başında bu neden olur:
$user = new Account($whatever, $objects, $we, $depend, $on);
if($user->login()) {
//Do this stuff when logged in
}
bunun yerine, her sayfada bir, mantık daha sonra değiştirilmesi gerekebilir:
$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
}
Bunu işlemek için sınıfının dışında bir işlev oluştururken bir seçenek olduğunu farkındayım ederken, bu sınıfta küresellerle obfuscating kadar kötü olmaz mıydı?