8 Stimmen

Referenzierung von Sitzungsvariablen in PHP

Angenommen, ich speichere ein Array oder ein Objekt namens $_SESSION["logged_in_user"] .

Wenn ich im Skript immer wieder darauf verweisen muss, welche der folgenden Vorgehensweisen ist dann die "beste"?

  • Verwenden Sie $_SESSION["logged_in_user"] jedes Mal (d.h. $_SESSION["logged_in_user"]["first_name"] )?

  • Kopieren Sie das Objekt in eine neue Variable wie $logged_in = $_SESSION["logged_in_user"] ?

  • Erstellen Sie einen Verweis auf die Sitzungsvariable wie $logged_in =& $_SESSION["logged_in_user"]

Wahrscheinlich denke ich zu viel darüber nach, aber meine Hauptsorge gilt dem Skript-Overhead und der Lesbarkeit. Ich bin nicht sicher, ob der wiederholte Verweis auf eine Sitzungsvariable langsamer ist als der Verweis auf eine inline-deklarierte Variable. Ich weiß auch nicht, ob das Kopieren einer Sitzungsvariablen in eine "normale" Variable mehr Overhead verursacht als nötig. Ich mag die Lesbarkeit von $logged_in["first_name"] über $_SESSION["logged_in_user"]["first_name"] .

Gibt es hier also eine bewährte Praxis oder ist es wirklich egal?

8voto

hakre Punkte 184133

$_SESSION ist ein spezielles superglobales PHP-Array. Sie können also technisch gesehen jederzeit darauf verweisen, indem Sie es einfach verwenden:

$_SESSION['logged_in_user']

Sie ist aber auch deshalb etwas Besonderes, weil sie sich verändern kann. Das folgende Beispiel macht dies sichtbar:

$alias =& $_SESSION;
session_start();
$alias['foo'] = 'bar';

Dieser Code setzt nicht $_SESSION['foo'] . Die $alias verweist auf eine frühere $_SESSION , session_start() hat eine neue Sitzung erstellt.

Wenn Sie diese Vorbehalte kennen, können Sie natürlich Ihre eigenen erstellen $_SESSION Abstraktion.

7voto

Homer6 Punkte 14461

Du denkst nicht zu viel nach.... Denken ist gut!

Ich persönlich benutze symfony 1.4 zum Programmieren, das Probleme wie diese löst, aber Sie können sich entscheiden, schlank zu bleiben :-)

Ich würde an OO (objektorientiert) denken. Erstellen Sie eine Benutzerklasse. Dann machen Sie Aufrufe wie UserFactory::getCurrentUser() oder User::getCurrentUser(), die das aktuell eingeloggte Benutzerobjekt zurückgeben. Eine der Mitgliedsvariablen dieser Klasse ist die user_id. Sie können jedoch zusätzliche Funktionen und Daten zu dieser Klasse hinzufügen.

Denken Sie daran, dass OO-Denken bedeutet, abstrakte Begriffe zu verwenden, die dem Problembereich sehr nahe stehen. Benutzer, Auto, Auftrag, etc. Sie müssen nicht spezifisch sein und Sie müssen nicht alle verfügbaren Informationen in diese Klasse aufnehmen, damit sie "vollständig" ist, was immer das auch sein mag. Nehmen Sie nur die Daten auf, die Sie zu diesem Zeitpunkt benötigen (halten Sie yagni im Kopf). Die Klassen sind Illusionen der konkreten, realen Dinge. Genauso wie die 3D-Modellierung eine Illusion der realen Welt ist.

Ich hoffe, das hilft...

1voto

Yes Barry Punkte 9228

Meiner Meinung nach denken Sie nicht zu viel darüber nach.

Aber es sei denn, Sie haben einige Sitzung Wrapper/Manager-Klasse, dann würde ich nur verwenden:

$_SESSION['logged_in_user']

So oder so ist es keine große Sache. Verwenden Sie, was immer funktioniert für Sie .

1voto

0x6A75616E Punkte 4616

Sie können eine Klasse erstellen, um Ihre Sitzung zu verwalten:

class MySession {

  public static &get( $key ){

    if( !array_key_exists( $key, $_SESSION ){
      return null;
    } 

    return $_SESSION[$key];

  }

}

Auf diese Weise müssen Sie sich keine Gedanken darüber machen, wie Sie die Werte abrufen können, und Sie duplizieren keine Daten:

$first_name = MySession::get( 'first_name' );

Hinweis: Diese Lösung befasst sich mit dem Zugriff auf die Sitzung und nicht mit Ihrer spezifischen Implementierung :)

1voto

Faisal Nasim Punkte 253
$_SESSION["logged_in_user"]["first_name"]

Bleiben Sie einfach; & fügen Sie keine überflüssigen Räume für die gleichen Variablen hinzu.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X