Serijalizacija objekata u PHP
PHP od verzije 4 podržava serijalizaciju promenljivih i celih objekata – http://php.net/manual/en/language.oop5.serialization.php
Serijalizacija je proces kroz koji od polaznog objekta dobijate vrednost (praktično string) koju možete sačuvati na bilo kom medijumu za čuvanje podataka (disk, baza, sesija, …) i kasnije od nje deserijalizacijom rekreirati dati objekat.
Primer serijalizacije niza:
$serijalizujMe = array(“Ovo”,”je”,”PHP”,”blog”);
$serijalizovano = serialize($serijalizujMe);
echo $serijalizovano;
Biće ispisano:
a:4:{i:0;s:3:”Ovo”;i:1;s:2:”je”;i:2;s:3:”PHP”;i:3;s:4:”blog”;}
Jedan primer korišćenja serijalizacije objekata može da bude i pamćenje objekta ulogovanog korisnika u sesiju.
Pretpostavimo da na dinamičkom sajtu koji ste napravili zahtevate od korisnika da se uloguje sa svojom username/password kombinacijom. Podatke o ulogovanom korisniku (ime, prezime, username, niz podataka o personalizovanim podešavanjima…) čuvate u objektu $korisnik i iz tog objekta ih dovlačite i koristite na svakoj stranici koja se prikazuje.
Jedan način da obezbedite da se objekat ispravno popuni na svakoj stranici sajta koju korisnik nakon logina otvori može da bude čuvanje identifikatora ulogovanog korisnika u sesiji i popunjavanje objekta $korisnik iz baze na početku svake stranice.
Sa druge strane, ako želite da izbegnete stalno obraćanje bazi za popunjavanje objekta $korisnik, možete da serijalizujete ceo objekat $korisnik u sesiju nakon uspešnog logina, i da ga odatle deserijalizujete na početku svake stranice, bez obraćanja bazi.
Naravno ovako rasterećujete bazu, ali opterećujete sistem sesija na serveru, šta je bolje rešenje zavisi od konkretne implementacije datog sajta. Takođe treba uzeti u obzir i resurse procesora web servera da izvrši serialize/unserialize.
Generalni primer serijalizacije objekta može da izgleda ovako:
Serijalizacija
$s=serialize($korisnik);
$_SESSION[‘serijalizovaniKorisnik’]=$s;
Deserijalizacija
$s=$_SESSION[‘serijalizovaniKorisnik’];
$korisnik=unserialize($s);
definicija klase korisnik mora da postoji na svim mestima gde se koriste serialize i unserialize funkcije. Možete serijalizovati sve tipove koje PHP podržava, osim resource tipova.
Serijalizacija je korisna za jednostavno čuvanje i prosleđivanje PHP vrednosti i celih objekata uz čuvanje njihove strukture i tipa.