Nehmen Sie ein Beispiel login()
Funktion innerhalb einer class Account
.Halten Sie es in PHP für schlecht, in Klassenmethoden auf Super-Globals zuzugreifen?
Versuchen Sie in diesem Moment, Bedenken über ungesehene Methoden zur Datenbereinigung, Kennwort-Salzen und dergleichen zu ignorieren. Konzentriert sich streng auf login()
, ist dieser globale Zugang schlecht juju? Ich vermeide es, PHP-Super-Globals innerhalb von Klassen zu verwenden, aber ich kann mir keinen guten Grund vorstellen, dies in dieser Situation nicht zu tun.
Ich kann verstehen, warum Sie magic-in-the-background nicht mit globals Interaktion über Klassen auftreten möchten, aber diese Globals sind in PHP integriert, werden nicht von der Klasse geändert und werden nur von dieser Klasse verwendet .
in dieser am Anfang der Seiten führen würden Sie ein Benutzer benötigt eingeloggt am:
$user = new Account($whatever, $objects, $we, $depend, $on);
if($user->login()) {
//Do this stuff when logged in
}
statt dessen auf jeder Seite, die Logik, die später geändert werden müssen:
$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
}
Und während mir bewusst ist, dass das Erstellen einer Funktion außerhalb der Klasse, um das zu behandeln, eine Option ist, wäre das nicht genauso schlimm wie Obfuscting Globals in einer Klasse?
+1 Sehr guter Punkt. Ich ändere niemals Super-Globals, also habe ich nicht darüber nachgedacht, dass sie anderswo modifiziert werden, und etwas, das darauf beruht, dass die Daten später gleich sind. –
Vielleicht gibt es eine Möglichkeit, Super-Globals zu sperren, damit sie nicht geändert werden können, nachdem das Skript gestartet wurde? Ich werde das untersuchen. –