Methode __serialize
Die magische Methode __serialize wird bei der Serialisierung eines Objekts
durch die Funktion serialize aufgerufen. Sie sollte ein Array mit Daten zurückgeben, die
serialisiert werden. Diese Methode wurde in PHP 7.4 als Alternative
zur Methode __sleep mit einer flexibleren Steuerung des Serialisierungsprozesses eingeführt.
Syntax
public function __serialize(): array
Beispiel
Erstellen wir eine Klasse mit der Methode __serialize, die festlegt,
welche Eigenschaften des Objekts serialisiert werden müssen:
<?php
class User {
public $name;
private $password;
public $email;
public function __construct($name, $password, $email) {
$this->name = $name;
$this->password = $password;
$this->email = $email;
}
public function __serialize(): array {
return [
'name' => $this->name,
'email' => $this->email,
'hash' => md5($this->password)
];
}
}
$user = new User('John', 'secret123', 'john@example.com');
echo serialize($user);
?>
Ergebnis der Codeausführung:
'O:4:"User":3:{s:4:"name";s:4:"John";s:5:"email";s:15:"john@example.com";s:4:"hash";s:32:"e5e9fa1ba31ecd1ae84f75caaa474f3a";}'
Beispiel
Demonstrieren wir den Unterschied zwischen __serialize und __sleep:
<?php
class Product {
public $id;
protected $price;
private $discount;
public function __sleep() {
return ['id', 'price'];
}
public function __serialize(): array {
return [
'id' => $this->id,
'price' => $this->price * (1 - $this->discount)
];
}
}
$product = new Product();
$product->id = 100;
$product->price = 50;
$product->discount = 0.1;
echo "Sleep: " . serialize($product) . "\n";
echo "Serialize: " . serialize($product);
?>
Ergebnis der Codeausführung:
'Sleep: O:7:"Product":2:{s:2:"id";i:100;s:5:"price";i:50;}'
'Serialize: O:7:"Product":2:{s:2:"id";i:100;s:5:"price";d:45;}'
Siehe auch
-
die Funktion
serialize,
die einen Wert in eine speicherbare Zeichenkette umwandelt