IL METODO MAGICO DESTRUCT


I METODI MAGICI SLEEP, WAKEUP, SERIALIZE E UNSERIALIZE
Quando serializziamo un oggetto potremmo voler impedire la serializzazione di alcune proprietà, e quando deserializziamo vorremmo poter effettuare alcune operazioni. Se ad esempio non vogliamo serializzare una proprietà usiamo il metodo magico __sleep();

MODIFICHIAMO IL CODICE DELLA CLASSE FILE MANAGER
Riprendiamo il codice della classe FileManager uitlizzando la classe SplFileObject in modo da rendere il codice più OOP e meno procedurale.

Questo è il var_dump() di $testfile2.

I METODI MAGICI SERIALIZE E UNSERIALIZE
Come si vede dal var_dump() la proprietà fileObj non è inizializzata, non tutti gli oggetti sono serializzabili, quindi non possiamo usare il metodo read() per leggere il file. Il problema si risolve con il metodo magico __wakeup(). I metodi magici __sleep() e __wakeup() vengono rispettivamente usati in fase di serializzazione e de serializzazione. Da PHP 7.4 sono stati sostituiti con __serialize() e __unserialize().
I METODI MAGICI GET E SET
Non possiamo accedere a proprietà private o protected dal global scope il metodo magico __get controlla l’accesso a proprietà non esistenti o non accessibili. __set assegna un valore a una proprietà, private o protected.
IL METODO MAGICO CALL
Come sappiamo le classi che scriviamo non devono essere troppo grandi ma compatte ed inserite in un contesto ben più ampio. Se una classe non ha tutte le funzionalità al proprio interno, da qualche parte deve averle per portare a termine il proprio compito. Uno dei metodi che abbiamo studiato è l’ereditarietà. Se entriamo nel metodo __call significa che ho il metodo esiste all’interno della classe Course però non è accessibile, oppure non esiste nella classe Course ma esiste nella classe EmailService. Il metodo magico __call() può essere utile per delegare l’invocazione di un metodo di una classe da un’altra classe.
IL METODO MAGICO CALLSTATIC
È del tutto simile al metodo __call() solo che in questo caso __callStatic() è inerente ai metodi statici. __callStatic() intercetta il metodo non esistente nel codice sotto riportato.


APPROFONDIMENTO
In PHP, ci sono diversi "metodi magici" che permettono di eseguire operazioni specifiche su oggetti. Questi metodi magici iniziano sempre con un doppio underscore (__) e sono usati per definire comportamenti speciali in certe situazioni. Di seguito ti spiego i metodi magici che hai richiesto: __serialize(), __unserialize(), __sleep(), __wakeup(), __call(), e __callStatic().
1. __serialize() e __unserialize()
Questi due metodi magici vengono usati per la serializzazione e deserializzazione degli oggetti. A partire da PHP 7.4, è preferibile usare __serialize() e __unserialize() invece di __sleep() e __wakeup() per una gestione più robusta e moderna della serializzazione.
• __serialize()
Questo metodo viene chiamato quando si esegue la serializzazione di un oggetto con serialize(). Il suo scopo è restituire una rappresentazione array-friendly dell'oggetto.
class MyClass
$obj = new MyClass("example data");
$serialized = serialize($obj);
• __unserialize()
Viene chiamato quando un oggetto viene deserializzato con unserialize(). Prende in input un array, tipicamente restituito da __serialize().
class MyClass
$unserialized = unserialize($serialized);
2. __sleep() e __wakeup()
Questi metodi magici sono utilizzati nella serializzazione e deserializzazione degli oggetti in versioni precedenti di PHP (prima di PHP 7.4).
• __sleep()
Questo metodo viene chiamato quando si serializza un oggetto con serialize(). È usato per restituire un array contenente i nomi delle proprietà che si desidera serializzare. Permette anche di fare pulizie, come chiudere connessioni a database prima della serializzazione.
class MyClass
• __wakeup()
Viene chiamato durante la deserializzazione con unserialize(). È usato, ad esempio, per ristabilire connessioni a database o rigenerare risorse.
class MyClass
3. __call()
Questo metodo viene chiamato quando viene invocato un metodo che non esiste o è inaccessibile (ad esempio, privato o protetto) su un oggetto. Accetta due parametri: il nome del metodo chiamato e un array di argomenti passati.
class MyClass
$obj = new MyClass();
$obj->nonExistingMethod('arg1', 'arg2');
4. __callStatic()
Simile a __call(), ma si applica a metodi statici. Questo metodo viene chiamato quando viene invocato un metodo statico che non esiste o non è accessibile.
class MyClass
MyClass::nonExistingStaticMethod('arg1', 'arg2');
Sintesi
•__serialize() e __unserialize(): per serializzazione e deserializzazione personalizzate (a partire da PHP 7.4).
•__sleep() e __wakeup(): versioni precedenti di serializzazione e deserializzazione.
•__call(): gestisce chiamate a metodi non esistenti o inaccessibili su oggetti.
•__callStatic(): gestisce chiamate a metodi statici non esistenti o inaccessibili.
Questi metodi sono strumenti potenti per controllare il comportamento degli oggetti e delle loro proprietà in situazioni specifiche.
Lascia un commento