I metodi magici sleep, wakeup, serialize, unserialize - OOP in PHP

I metodi magici sleep, wakeup, serialize, unserialize - OOP in PHP

Cos'è il metodo magico __sleep?

In PHP, il metodo magico __sleep() è un metodo speciale che viene chiamato automaticamente quando un oggetto viene serializzato con la funzione serialize(). Questo metodo può essere definito all'interno di una classe e deve restituire un array contenente i nomi delle proprietà dell'oggetto che devono essere serializzate.

Quando un oggetto viene serializzato, PHP chiama automaticamente il metodo __sleep() se è definito nella classe dell'oggetto. Il metodo __sleep() restituisce un array contenente i nomi delle proprietà dell'oggetto che devono essere serializzate. Solo le proprietà elencate nell'array verranno serializzate, mentre le altre verranno ignorate.

Qual'é la sintassi del metodo magico __sleep?

public function __sleep(): array

Un esempio con il metodo magico __sleep.

class MyClass {
    public $prop1;
    public $prop2;
    public $prop3;

    public function __sleep() {
        return array('prop1', 'prop2');
    }
}

Cos'è il metodo magico __wakeup?

In PHP, il metodo magico __wakeup() è un metodo speciale che viene chiamato automaticamente quando un oggetto viene deserializzato con la funzione unserialize(). Questo metodo può essere definito all'interno di una classe e viene utilizzato per inizializzare le proprietà dell'oggetto dopo la deserializzazione.

Quando un oggetto viene deserializzato, PHP chiama automaticamente il metodo __wakeup() se è definito nella classe dell'oggetto. Il metodo __wakeup() può essere utilizzato per inizializzare le proprietà dell'oggetto dopo la deserializzazione. Ciò può essere utile se le proprietà dell'oggetto hanno bisogno di essere inizializzate in modo diverso rispetto a quando l'oggetto è stato creato inizialmente.

Qual'è la sintassi del metodo magico __wakeup?

public function __wakeup(): void

Un esempio con il metodo magico __wakeup.

Ad esempio, si può definire il metodo __wakeup() per impostare un valore di default per una proprietà se questo valore non è stato salvato durante la serializzazione:

class MyClass {
    public $prop1;
    public $prop2;

    public function __wakeup() {
        if (!isset($this->prop1)) {
            $this->prop1 = 'default';
        }
    }
}

In questo esempio, il metodo __wakeup() controlla se la proprietà prop1 è stata inizializzata dopo la deserializzazione dell'oggetto. Se la proprietà prop1 non è stata impostata, il metodo __wakeup() imposta il valore predefinito "default" per la proprietà.

Il metodo magico __wakeup() può essere utile quando si lavora con oggetti che devono essere inizializzati in modo specifico dopo la deserializzazione.

Cos'è il metodo magico serialize;

In PHP, il metodo magico __serialize() è un metodo speciale che viene chiamato automaticamente quando un oggetto viene serializzato con la funzione serialize(). Questo metodo può essere definito all'interno di una classe e viene utilizzato per personalizzare la serializzazione di un oggetto.

Quando un oggetto viene serializzato, PHP chiama automaticamente il metodo __serialize() se è definito nella classe dell'oggetto. Il metodo __serialize() può essere utilizzato per personalizzare la serializzazione di un oggetto definendo una rappresentazione personalizzata dell'oggetto.

Qual'è la sintassi del metodo magico serialize?

public function __serialize(): array {
    // Codice per personalizzare la serializzazione dell'oggetto
}

Un esempio con il metodo magico serialize.

In questo esempio, viene definita una classe User che rappresenta un utente con nome, email e password. La classe ha un costruttore che inizializza le proprietà dell'utente, e i metodi magici __serialize() e __unserialize() per personalizzare la serializzazione dell'oggetto.

Il metodo magico __serialize() restituisce un array contenente il nome, l'email e una rappresentazione asteriscata della password dell'utente. In questo modo, la password dell'utente non verrà inclusa nella rappresentazione serializzata dell'oggetto, garantendo la protezione dei dati sensibili.

Il metodo magico __unserialize() viene chiamato automaticamente quando l'oggetto viene deserializzato con la funzione unserialize(). Il metodo __unserialize() viene utilizzato per ripristinare le proprietà dell'oggetto dopo la deserializzazione. In questo caso, il metodo __unserialize() reimposta il valore della password dell'utente come asterischi, per garantire la protezione dei dati sensibili.

Viene quindi creato un oggetto $user della classe User, in cui vengono assegnati valori alle sue proprietà. L'oggetto viene serializzato con la funzione serialize(), quindi deserializzato con la funzione unserialize(). Il risultato della deserializzazione viene assegnato alla variabile $unserialized_user.

Infine, viene utilizzata la funzione var_dump() per stampare i valori delle proprietà dell'oggetto $user e dell'oggetto $unserialized_user. In questo caso, la password dell'utente è rappresentata come asterischi in entrambi gli oggetti, poiché viene protetta durante la serializzazione e deserializzazione.

class User {
    private $name;
    private $email;
    private $password;

    public function __construct($name, $email, $password) {
        $this->name = $name;
        $this->email = $email;
        $this->password = $password;
    }

    public function __serialize(): array {
        $data = array(
            'name' => $this->name,
            'email' => $this->email,
            'password' => '*****'
        );
        return $data;
    }

    public function __unserialize(array $data): void {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->password = '*****';
    }
}

$user = new User("Mario Rossi", "mario@example.com", "password123");

$serialized_user = serialize($user);

$unserialized_user = unserialize($serialized_user);

var_dump($user);
var_dump($unserialized_user);

Cos'è il metodo magico unserialize();

In PHP, il metodo magico __unserialize() è un metodo speciale che viene chiamato automaticamente quando un oggetto viene deserializzato con la funzione unserialize(). Questo metodo può essere definito all'interno di una classe e viene utilizzato per personalizzare la deserializzazione di un oggetto.

Quando un oggetto viene deserializzato con la funzione unserialize(), PHP chiama automaticamente il metodo __unserialize() se è definito nella classe dell'oggetto. Il metodo __unserialize() riceve come argomento un array contenente i dati serializzati dell'oggetto e deve ripristinare le proprietà dell'oggetto in base a tali dati.

L'uso del metodo magico __unserialize() consente di personalizzare la deserializzazione di un oggetto, poiché è possibile ripristinare le proprietà dell'oggetto in modo personalizzato e proteggere i dati sensibili.

Qual'è la sintassi del metodo magico unserialize?

class User {
    private $name;
    private $email;
    private $password;

    public function __construct($name, $email, $password) {
        $this->name = $name;
        $this->email = $email;
        $this->password = $password;
    }

    public function __unserialize(array $data): void {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->password = '*****';
    }
}

$user = new User("Mario Rossi", "mario@example.com", "password123");

$serialized_user = serialize($user);

$unserialized_user = unserialize($serialized_user);

var_dump($user);
var_dump($unserialized_user);

Un esempio con il metodo magico unserialize.

In questo esempio, viene definita una classe User che rappresenta un utente con nome, email e password. La classe ha un costruttore che inizializza le proprietà dell'utente, e il metodo magico __unserialize() per personalizzare la deserializzazione dell'oggetto.

Il metodo magico __unserialize() reimposta le proprietà dell'oggetto in base ai dati serializzati, impostando il valore della proprietà password come asterischi per proteggere i dati sensibili.

Viene quindi creato un oggetto $user della classe User, in cui vengono assegnati valori alle sue proprietà. L'oggetto viene serializzato con la funzione serialize(), quindi deserializzato con la funzione unserialize(). Il risultato della deserializzazione viene assegnato alla variabile $unserialized_user.

Infine, viene utilizzata la funzione var_dump() per stampare i valori delle proprietà dell'oggetto $user e dell'oggetto $unserialized_user. In questo caso, la password dell'utente è rappresentata come asterischi in entrambi gli oggetti, poiché viene protetta durante la deserializzazione.

class User {
    private $name;
    private $email;
    private $password;

    public function __construct($name, $email, $password) {
        $this->name = $name;
        $this->email = $email;
        $this->password = $password;
    }

    public function __unserialize(array $data): void {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->password = '*****';
    }
}

$user = new User("Mario Rossi", "mario@example.com", "password123");

$serialized_user = serialize($user);

$unserialized_user = unserialize($serialized_user);

var_dump($user);
var_dump($unserialized_user);

Scritto da Donato Pirolo

Ciao, sono Donato, frontend developer con una smisurata passione per la SEO. Creo strumenti ad hoc per aiutare aziende e professionisti ad essere cercati sul web e trovare clienti.

Potrebbero interessarti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyright © 2023
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram