Metode __serialize

Die towersmetode __serialize word aangeroep wanneer 'n objek geserialiseer word deur die funksie serialize. Dit moet 'n skikking van data terugstuur wat geserialiseer sal word. Hierdie metode het in PHP 7.4 verskyn as 'n alternatief vir die metode __sleep met meer buigsame beheer oor die serialiseringsproses.

Sintaksis

phppublic function __serialize(): array

Voorbeeld

Kom ons skep 'n klas met die metode __serialize, wat sal bepaal watter eienskappe van die objek geserialiseer moet word:

php<?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);
?>

Resultaat van die uitvoering van die kode:

php'O:4:"User":3:{s:4:"name";s:4:"John";s:5:"email";s:15:"john@example.com";s:4:"hash";s:32:"e5e9fa1ba31ecd1ae84f75caaa474f3a";}'

Voorbeeld

Kom ons demonstreer die verskil tussen __serialize en __sleep:

php<?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);
?>

Resultaat van die uitvoering van die kode:

php'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;}'

Sien ook

  • die funksie serialize,
    wat 'n waarde omskep in 'n stoorbare string