Objektorientierte Programmierung mit PHP: Refreshing Kills meine Objekte
-
21-09-2019 - |
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.
- Gibt es irgendeine Art und Weise ein zu halten Objekt am Leben die ganze Zeit, dass jemand auf der Website surfen?
- Welche Alternativen gibt es zu meinem Problem?
Es wäre wirklich hilfreich sein, beispielsweise auch zu haben!
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 .
- ist PHP zustandsbehaftete nicht jede Anfrage auf dem Server 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 ...