Методот __serialize
Магичниот метод __serialize се повикува при сериализација на објект
со функцијата serialize. Тој треба да врати низа од податоци што
ќе бидат сериализирани. Овој метод се појави во PHP 7.4 како алтернатива
на методот __sleep со пофлексибилно управување на процесот на сериализација.
Синтакса
public function __serialize(): array
Пример
Да создадеме класа со метод __serialize што ќе одредува
кои својства на објектот треба да се сериализираат:
<?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);
?>
Резултат од извршувањето на кодот:
'O:4:"User":3:{s:4:"name";s:4:"John";s:5:"email";s:15:"john@example.com";s:4:"hash";s:32:"e5e9fa1ba31ecd1ae84f75caaa474f3a";}'
Пример
Да ја прикажеме разликата помеѓу __serialize и __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);
?>
Резултат од извршувањето на кодот:
'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;}'
Погледнете исто така
-
функцијата
serialize,
која го преобразува вредноста во складирана низа