SerializableImplementation
SerializableImplementation
Das Trait definiert eine Implementierung des \Serializable Interfaces und kann in Zusammenspiel mit der Verwendung des \Serializable-Interfaces angewendet werden.
Um eine fertige Implementierung umzusetzen, reicht es das Interface einzubinden und das Trait mittelse use anzugeben. Wird in der Klasse, die den Trait verwendet die Konstante SERIALVERSION definiert, so kann darüber die Version der Serialisierung geprüft werden. Wird die Konstante nicht definiert, so wird immer die Version 1 genommen. In allen von Alvine\Core\Alvine abgeleiteten Klassen ist die Konstante definiert.
Lambdafunktionen
Werden Lambdafunktionen definiert, so kann das Objekt nicht mehr serialisiert werden. Der Aufruf von serialize würde in so einem Fall eine PHP Exception werfen. Die Lambdafunktion wird nicht im Scope des Objekts ausgeführt. Es steht als erster Parameter allerdings eine Referenz auf das Objekt zur Verfügung.class NewClass {
use SerializableImplementation;
const SERIALVERSION = 1;
// ... code
}
Volatile Werte
Als Besonderheit können Eigenschaften mit der Vorsilbe volatile von der Serialisierung ausgeschlossen werden. Im folgenden Beispiel wird $index serialisiert, $volatileIndex jedoch nicht.class NewClass {
use SerializableImplementation;
protected $volatileIndex = 1;
}
Versionsprüfung
Abgeleitetet Klassen müssen, wenn Sie die Prüfung der Version nutzen wollen, die Methode Alvine::checkAndAdjustSerialisation() überschreiben. Im folgenden Sequenzdiagramm ist der Aufruf von Alvine::checkAndAdjustSerialisation() beschrieben.activate B B --> A
Fehler beim Serialisieren
Beim Serialisieren können mehrere Fehler auftreten. Einige werden über eine UnserializeException abgefangen, andere direkt von PHP. In den Fällen in denen PHP den Fehler erkennt (z.B. wenn die gewünschte Klasse nicht verfügbar ist), dann wird eine PHP \Exception geworfen.Debugging
Sollten beim Ausführen von unserialise die Fehlermeldung Class __PHP_Incomplete_Class has no unserializer kommen, dass die Klasse fehlt, kann mit folgendem Konstrukt der Klassenname ermittelt werden:
\ini_set('unserialize_callback_func', 'debug_unserialize');
function debug_unserialize($classname) {
die(var_dump($classname));
}
Tags
Table of Contents
Properties
- $hasAssociatedProperties : boolean
- $hasVolatileProperties : boolean
Methods
- __serialize() : array<string|int, mixed>
- Serialization of the object and data. In the serialized object also stores meta-information for matching.
- __unserialize() : void
- hasAssociatedProperties() : boolean
- Check if the object has associative properties
- hasVolatileProperties() : boolean
- Prüfen ob das Objekt volatile Eigenschaften besitzt
- checkAndAdjustSerialisation() : array<string|int, mixed>
- Dealing with versions
Properties
$hasAssociatedProperties
protected
boolean
$hasAssociatedProperties
= null
(nur initialisiert, wenn Serialisierung erfolgte)
$hasVolatileProperties
protected
boolean
$hasVolatileProperties
= null
(nur initialisiert, wenn Serialisierung erfolgte)
Methods
__serialize()
Serialization of the object and data. In the serialized object also stores meta-information for matching.
public
__serialize() : array<string|int, mixed>
If a derived class is not to be serializable, then this * method must be overridden and throw an exception. this method must be overridden and throw an exception.
Properties starting with volatile or associated. are handled separately. Properties with prefix volatile are not serialized. For properties with the prefix associated, only the * ID of the object is serialized. ID of the object is serialized. If no object is stored in the property is stored in the property, a TypeException is thrown.
Tags
Return values
array<string|int, mixed>__unserialize()
public
__unserialize(array<string|int, mixed> $serialized) : void
Parameters
- $serialized : array<string|int, mixed>
Tags
hasAssociatedProperties()
Check if the object has associative properties
public
hasAssociatedProperties() : boolean
Tags
Return values
booleanhasVolatileProperties()
Prüfen ob das Objekt volatile Eigenschaften besitzt
public
hasVolatileProperties() : boolean
Tags
Return values
booleancheckAndAdjustSerialisation()
Dealing with versions
protected
checkAndAdjustSerialisation(array $serialization) : array<string|int, mixed>
This method checks an object and ideally repairs older copies. If an old copy cannot be restored be restored, an exception is thrown.
This method must be overridden by the derived classes. be overridden. In the derived class, * the parent method should be called. the parent method should be called.
Parameters
- $serialization : array
-
Daten des serialisiertes Objekts