Wie kann ich Objekte in einer Sitzung in PHP speichern?

8

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

    
Carlos 30.10.2012, 23:09
quelle

1 Antwort

14

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:

%Vor%

Nehmen wir nun an, Sie laden ein serialisiertes Objekt in Ihren neuen Code, wenn Test auf Version 1 war:

%Vor%

Sie werden das bekommen:

%Vor%

Außerdem können Sie keine alten Methoden verwenden:

%Vor%     
Francis Avila 30.10.2012, 23:30
quelle

Tags und Links