Frage

Ich habe in PHP für OOP stochern und ich bemerkte etwas ... Objekte sind neu instanziiert jedes Mal, wenn die Seite aktualisiert wird. Das Problem ist, dass ich das Objekt möge die ganze Zeit in Klassenvariablen bestimmte Informationen zu halten, dass jemand auf einer Website ist.

  1. Gibt es irgendeine Art und Weise ein zu halten Objekt am Leben die ganze Zeit, dass jemand auf der Website surfen?
  2. Welche Alternativen gibt es zu meinem Problem?

Es wäre wirklich hilfreich sein, beispielsweise auch zu haben!

War es hilfreich?

Lösung

PHP ist nicht Stateful. Jede Seite zu laden ist ein einmaliges Ereignis. Sie können Daten mit Sitzungen bestehen bleiben, oder durch Informationen in einer Datenbank zu speichern.

Andere Tipps

Sie können mit Sessions einen Benutzer zwischen verschiedenen Seiten zugeordneten Daten zu halten (Zitat) :

  

Unterstützung Session in PHP besteht aus einem   Möglichkeit, bestimmte Daten zu erhalten über   nachfolgende Zugriffe.

Siehe Session Abschnitt der manuellen Handhabung, um weitere Informationen zu Sitzungen .

Ein PHP-Skript hat zu verlassen, bevor Apache die Seite dienen kann, also wenn Sie wirklich tun wollen, eine Sache, die Sie tun können, ist serialize und speichern alle Objekte, die Sie anhalten und Verwendung Sitzung Cookies, der Benutzer zu halten

  1. ist PHP zustandsbehaftete nicht jede Anfrage auf dem Server
  2. ein neuer Prozess ist

Ihre beste Wette ist Session-Daten zu verwenden und die Sitzungsdaten zu den Objekten, wenn sie gebraucht instanziiert. Lassen Sie die contructors ziehen Sie die Daten, die sie brauchen, um aus der Sitzung, und Sie werden im Wesentlichen den Zustand Fülle haben Sie benötigen.

Sie können sesion Acess mit

$_SESSION['stuff'] = $data;

, dann können Sie Ihre Objekte verwenden wie $ X = new Datastor ($ _ SESSION [ 'Sachen']);

, wenn Theres Daten in der Sitzung das Objekt selbst aus diesen Daten bevölkern werden. Sonst wird es auf den Standard init Standard.

Auch wenn Ansätze wie Objekte serialisiert und dann Deserialisieren sie nützlich ist, müssen Sie Sie sicherstellen, dass zuerst verstehen, Warum Ihre Objekte „verschwinden“.

HTTP, das verwendete Protokoll-Seiten und andere Ressourcen von Web-Servern abzurufen, ist staatenlos . Im Grunde bedeutet es eine Anforderung weiß nichts von einer anderen Anfrage, auch wenn sie aus dem gleichen Benutzer kam. Denken Sie daran, auf diese Weise, wenn Sie Ihre PHP-Seite anfordern, wird das Skript ausgeführt und nachdem es beendet Apache sendet das Ergebnis an Dich. Wenn Sie die Seite erneut anfordern, tut es das Gleiche, als wäre es das erste Mal, wenn Sie es getan haben. Es ist staatenlos.

Es gibt Techniken Zustand zwischen Anfragen zu halten (es macht nicht Ihre Objekte vergessen) und diejenigen beinhalten Dinge wie Cookies oder URL-Rewriting. Aber man muss sich vor Augen halten, die staatenlos Natur von HTTP (und damit Ihre PHP-Skript), wenn Web-Anwendungen zu entwickeln.

SESSIONS sind gut, ich benutze sie Objektzustand in einigen meiner PHP-Programmierung zu halten.

oder eine bessere Lösung zu verwenden wäre, Flex Sie müssen also keine Sorgen zu machen über das HTTP-Protokoll staatenlos ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top