Resumo : neste tutorial, você aprenderá como usar a serialize()
função PHP para serializar um objeto.
Introdução à função serialize() do PHP
Para serializar um objeto em uma string , você usa a serialize()
função:
serialize(mixed $value): string
Linguagem de código: PHP ( php )
A serialize()
função retorna uma string que contém uma representação de fluxo de bytes do objeto. E você pode armazenar essa string em um armazenamento, como um arquivo ou banco de dados.
Por exemplo, o seguinte define a Customer
classe:
<?php
class Customer
{
private $id;
private $name;
private $email;
public function __construct(int $id, string $name, string $email)
{
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
public function getInitial()
{
if ($this->name !== '') {
return strtoupper(substr($this->name, 0, 1));
}
}
}
Linguagem de código: PHP ( php )
E isso ilustra como usar a serialize()
função para serializar um Customer
objeto:
<?php
require 'Customer.php';
$customer = new Customer(10, 'John Doe', '[email protected]');
$str = serialize($customer);
var_dump($str);
Linguagem de código: PHP ( php )
Saída:
string(132) "O:8:"Customer":3:{s:12:"Customerid";i:10;s:14:"Customername";s:8:"John Doe";s:15:"Customeremail";s:20:"[email protected]";}"
Linguagem de código: PHP ( php )
Observe que a serialize()
função serializa apenas as propriedades do objeto, não o método.
O exemplo a seguir serializa um Customer
objeto e salva a string em um arquivo:
<?php
require 'Customer.php';
$customer = new Customer(10, 'John Doe', '[email protected]');
$str = serialize($customer);
file_put_contents('customer.dat', $str);
Linguagem de código: PHP ( php )
O __sleep()
método mágico
A serialize()
função verifica se a classe implementa o __sleep()
método. Nesse caso, ele executará o __sleep()
método antes de serializar o objeto.
public __sleep(): array
Linguagem de código: PHP ( php )
O __sleep()
método retorna um array que contém nomes de propriedades que serão serializadas.
Se o __sleep()
método não retornar nada, a serialize()
função serializará o valor nulo e emitirá um arquivo E_NOTICE
.
O exemplo a seguir ilustra como implementar o __sleep()
método:
<?php
class Customer
{
private $id;
private $name;
private $email;
public function __construct(int $id, string $name, string $email)
{
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
public function getInitial()
{
if ($this->name !== '') {
return strtoupper(substr($this->name, 0, 1));
}
}
public function __sleep(): array
{
return ['id', 'name'];
}
}
Linguagem de código: PHP ( php )
Neste exemplo, o __sleep()
método retorna um array que contém os nomes das propriedades id e name. E a serialize()
função serializará apenas os valores destas propriedades:
<?php
require 'Customer.php';
$customer = new Customer(10, 'John Doe', '[email protected]');
$str = serialize($customer);
var_dump($str);
Linguagem de código: PHP ( php )
Saída:
string(81) "O:8:"Customer":2:{s:12:"Customerid";i:10;s:14:"Customername";s:8:"John Doe";}"
Linguagem de código: PHP ( php )
Na prática, você desejaria criptografar informações confidenciais, como e-mail e números de cartão de crédito, antes de realizar a serialização.
O __serialize()
método mágico
O __serialize()
método é semelhante ao __sleep()
método:
public __serialize(): array
Linguagem de código: PHP ( php )
No entanto, o __serialize()
método retorna uma matriz associativa de pares chave/valor que representa a forma serializada do objeto.
Além disso, se o __serialize()
método não retornar um array, o PHP lançará um arquivo TypeError
.
Por exemplo:
<?php
class Customer
{
private $id;
private $name;
private $email;
public function __construct(int $id, string $name, string $email)
{
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
public function getInitial()
{
if ($this->name !== '') {
return strtoupper(substr($this->name, 0, 1));
}
}
public function __serialize(): array
{
return [
'id' => $this->id,
'name' => $this->name,
];
}
}
Linguagem de código: PHP ( php )
O seguinte ilustra como usar a serialize()
função para serializar um Customer
objeto:
<?php
require 'Customer.php';
$customer = new Customer(10, 'John Doe', '[email protected]');
$str = serialize($customer);
var_dump($str);
Linguagem de código: PHP ( php )
Se uma classe tiver o método __serialize()
e __sleep()
, a serialize()
função chama __serialize()
apenas o método e ignora o __sleep()
método.
Resumo
- Use a
serialize()
função para serializar um objeto em uma string de representação de fluxo de bytes. - Use o método
__sleep()
ou__serialize()
para implementar a lógica antes da serialização.