login()
の機能をclass Account
内で実行します。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 */
}
データ消毒、パスワードの塩漬け、および、そのような目に見えないための方法についての懸念を無視するように、この瞬間のために試してみてください。 login()
に厳密に集中している、このグローバルアクセス悪いジュジュですか?クラス内で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
}
クラスの外部で関数を作成して処理することはオプションであると認識していますが、クラス内のグローバルを難読化するほど悪くないでしょうか?
+1非常に良い点。私はスーパーグローバルを決して変更しないので、他の場所でそれらが変更されているとは考えておらず、後で同じデータに依存するものもあります。 –
スーパーグローバルをロックしてスクリプトの開始後に変更できない場合がありますか?私はそれを調べます。 –