Wie kann ich Objekte speichern in einer session in PHP?
Hallo, ich würde gerne speichern, oder speichern Sie ein Objekt in einer session,mit Klassen wie SessionHandler oder arrays $_SESSION,ich habe gesehen, dass es möglich ist, wenn ich serialisieren des Objekts,und ich möchte nicht verlieren, die Methoden, die object-Instanz..
Ich habe gesehen, seralizing es ist möglich, aber die Objekte, was ich will-Shop erstellt von PDOStatement::von fetchObject() obwohl die Instanz der Klasse "Users" ich bekomme diese Fehlermeldung:
PDOException: Sie können nicht serialisiert oder unserialize PDO-Instanzen
Warum? Es ist nicht eine PDO-Instanz..
Sorry, ich bin Spanisch und ich spreche nicht sehr gut Englisch..
Dank
- Zeigen, wie Sie versuchen, es zu serialisieren, die von der exception-es scheint, dass Sie versuchen, zu serialisieren-Anweisung nicht aus.
- Was @dev-null-dweller gesagt hat. Ich kann serialisiert das Ergebnis
PDOStatement::fetchObject
gut. - Wenn das Objekt aus der Datenbank, warum würden Sie wollen, um es zu serialisieren, die in einer Sitzung? Nehmen Sie einfach es aus der DB wieder. Die Sitzungen sollten so weit wie möglich vermieden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
PHP-native
$_SESSION
Sitzungen transparent serialize und unserialize Objekte, die PHP unterstützen die Serialisierungs-Protokoll oder dieSerializable
interface. Sie müssen nicht explizit serialisieren.PHP nicht serialisieren
Ressourcen
da diese Griffe, um einige stateful resource außerhalb der PHP-control. Das ist, warum Sie nicht serialisierenPDO
oderPDOStatement
Objekte.Standardmäßig ein Objekt serialisiert wird durch das speichern aller Eigenschaftsnamen und-Werte und unserialized indem Sie ein Objekt erstellen mit der gleichen Klasse (ohne aufrufen des Konstruktors) und direkt Einstellung die serialisierten Eigenschaften. Sie können anpassen der Serialisierung Verhalten für Ihre Objekte mit dem
__sleep
und__wakeup
Magische Methoden oder durch die Umsetzung derSerializable
- Schnittstelle. Aber nicht beide! Wenn Sieimplements Serializable
,__sleep
und__wakeup
werden ignoriert.Ein wichtiger Hinweis:, wenn der Objekt-Serialisierung, Sie muss haben die Klassendefinition geladen werden, bevor Sie unserialize (oder einen autoloader, der laden kann) und es muss match der Klassendefinition des Objekts, das serialisiert wurde. Klasse Definitionen werden nicht gespeichert in der serialisierten Daten.
Beispielsweise angenommen, Sie haben die folgenden:
Nun stellen Sie sich vor ändern
Test
einem Tag wie diesem statt:Nehmen wir nun an, laden Sie in Ihren neuen code ein Objekt serialisiert, wenn
Test
war bei version 1:Erhalten Sie diese:
Darüber hinaus können Sie nicht mit alten Methoden:
__wakeup()
oder dieSerializer
- Schnittstelleunserialize()
Methode das tut, was Sie möchten, oder fügen Sie einesetPDO()
- Methode und setzt das PDO-Objekt manuell. Bottom line, wenn Sie sollten nicht serialisiert Objekte, die die Ressourcen enthalten,! Eine andere Klasse design.