Serializzazione e Deserializzazione - OOP in PHP

Serializzazione e Deserializzazione - OOP in PHP

In PHP, la serializzazione viene utilizzata per trasformare un oggetto PHP in una stringa che può essere memorizzata in un database, in un file di testo, o inviata ad un'altra applicazione via rete.

La deserializzazione è il processo inverso di ricostruire un oggetto o una struttura dati complessa a partire dalla sua rappresentazione serializzata. In PHP, la deserializzazione viene utilizzata per ricostruire un oggetto o una struttura dati a partire dalla stringa serializzata, in modo da ripristinare la sua forma originale e poterla utilizzare di nuovo nell'applicazione.

In generale, la serializzazione e la deserializzazione consentono di salvare e trasferire informazioni complesse in un formato che sia facilmente gestibile e compatibile con diverse applicazioni e tecnologie.:

Sintassi di una serializzazione

$serialized_data = serialize($object);

In questo caso, $object rappresenta l'oggetto che si desidera serializzare, mentre $serialized_data è la stringa serializzata che verrà generata.

Sintassi di una deserializzazione

$object = unserialize($serialized_data);

In questo caso, $serialized_data rappresenta la stringa serializzata che si desidera deserializzare e $object è l'oggetto ricostruito.

Esempio di serializzazione e deserializzazione di un Oggetto

/*  L'array viene trasformato in stringa e memorizzato all'interno del file
    poi se ad esempio andiamo a leggere in un altro file questa informazione, 
    verrà letto il contenuto di questo file e verrà effettuata la serializzazione, 
    ovvero da questa stringa verrà ricreato questo array.

    Il processo di serializzazione può essere effettuato senza problemi su un oggetto.
    Se ad esempio, abbiamo bisogno di memorizzarlo in un file o in un database, solitamente 
    in un database non abbiamo la possibilità di memorizzare dati complessi come oggetti.

    Per serializzare un oggetto possiamo usare la funzione serialize.
 */

class User {
    public int $id;
    public string $nome;
    public UserColor $instanzaColore;

    public function __construct(string $nome, array $colorePreferito){
        $this->nome = $nome;
        $this->id = rand(1,1000);
        $this->instanzaColore = new UserColor($colorePreferito);
    }
}
class UserColor{
    public function __construct(public array $colorePreferito){
    }
}

$user1 = new User("Donato",['Blu','Rosso']);
echo var_dump($user1);
$stringaSerializzata = serialize($user1);
echo $stringaSerializzata . "<br>";
$stringaDeserializzata = unserialize($stringaSerializzata);
var_dump($stringaDeserializzata);

$deepCopy = unserialize(serialize($user1)); // In questo modo creiamo una deep copy dell'oggetto.
var_dump($deepCopy);

Usare la serializzazione per creare una deep copy di un oggetto

E' possibile utilizzare unserialize(serialize($oggetto)) per creare una copia profonda (deep copy) di un oggetto in PHP.

La funzione serialize() trasforma l'oggetto in una stringa serializzata che rappresenta l'oggetto, inclusi tutti i suoi attributi e valori. Questa stringa serializzata può essere poi utilizzata per ricostruire l'oggetto originale utilizzando la funzione unserialize().

Quando l'oggetto viene deserializzato, PHP costruisce una nuova istanza dell'oggetto a partire dalla stringa serializzata, creando una copia completa dell'oggetto originale. In questo modo, ogni attributo dell'oggetto e ogni valore verranno copiati nella nuova istanza dell'oggetto, creando una copia profonda dell'oggetto originale.

class MyClass {
  public $name;
  public $age;

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

// Creazione dell'oggetto originale
$my_object = new MyClass("Mario Rossi", 35);

// Creazione della copia profonda dell'oggetto
$my_deep_copy = unserialize(serialize($my_object));

// Modifica dell'oggetto originale
$my_object->name = "Luigi Bianchi";
$my_object->age = 40;

// Stampa delle proprietà dell'oggetto originale e della sua copia profonda
echo "Oggetto originale: " . $my_object->name . " " . $my_object->age . "\n"; // Luigi Bianchi 40
echo "Copia profonda: " . $my_deep_copy->name . " " . $my_deep_copy->age . "\n"; // Mario Rossi 35

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