Hallo Ich möchte ein Objekt in einer Sitzung speichern oder speichern, mit Klassen wie SessionHandler oder Arrays $ _SESSION, ich habe gesehen, dass es möglich ist, wenn ich das Objekt serialisieren, und ich möchte nicht die Methoden verlieren dieser Objektinstanz .. Ich habe gesehen Seralisieren ist möglich, aber die Objekte, was ich speichern möchte, wird von PDOStatement :: fetchObject () erstellt, obwohl die Instanzklasse "Benutzer" ist, bekomme ich diesen Fehler:
PDOException: PDO-Instanzen können nicht serialisiert oder serialisiert werden Warum? Es ist keine PDO-Instanz ..
Tut mir leid, ich bin Spanisch und ich spreche kein Englisch sehr gut. Danke
PHP native $_SESSION
sessions serialisieren und serialisieren Objekte, die das Serialisierungsprotokoll von PHP unterstützen die Serializable
-Schnittstelle . Sie müssen sie nicht explizit serialisieren.
PHP kann resources
nicht serialisieren, da es sich um Handles zu einer Stateful-Ressource außerhalb der Kontrolle von PHP handelt . Aus diesem Grund können Sie PDO
oder PDOStatement
Objekte nicht serialisieren.
Standardmäßig wird ein Objekt serialisiert, indem alle Eigenschaftsnamen und Werte gespeichert und unserialisiert werden, indem ein Objekt mit derselben Klasse erstellt wird (ohne den Konstruktor aufzurufen) und die serialisierten Eigenschaften direkt festgelegt werden. Sie können das Serialisierungsverhalten für Ihre Objekte mit den Methoden __sleep
und __wakeup
magic anpassen oder die Schnittstelle Serializable
implementieren. Aber nicht beide! Wenn Sie implements Serializable
verwenden, werden __sleep
und __wakeup
ignoriert.
Eine wichtige Anmerkung: Wenn Sie die Objektserialisierung verwenden, müssen Sie die Klassendefinition vor dem Deserialisieren laden (oder einen Autoloader haben, der es laden kann) und es muss mit der Klassendefinition des Objekts übereinstimmen, das serialisiert wurde. Klassendefinitionen werden nicht in den serialisierten Daten gespeichert.
Angenommen, Sie haben Folgendes:
%Vor% Stellen Sie sich vor, Sie ändern Test
eines Tages, um stattdessen so zu sein:
Nehmen wir nun an, Sie laden ein serialisiertes Objekt in Ihren neuen Code, wenn Test
auf Version 1 war:
Sie werden das bekommen:
%Vor%Außerdem können Sie keine alten Methoden verwenden:
%Vor%Tags und Links php persistence pdo pdostatement