Banner
Blog | Artikler | Projekter | CV

Hvad?

Når et objekt i PHP gemmes i $_SESSION variablen bliver den serialized, dvs. lavet om til en tekst streng som kan gemmes i en fil eller en database. Når vi går ind, på en ny side og $_SESSION variablen bliver oprettet igen sker der en unserialize af alle variablerne, så vi får omdannet de gemte tekst strengene tilbage til vores objekter.

Hvis vi ikke før vi kalder session_start() har loaded klasse definitionerne til objekterne, i $_SESSION vil PHP komme med en fejl.

Det er med PHP muligt at loade vores klasse definitioner dynamisk, så vi ikke behøver at huske, hvilke sider der kræver hvilke klasser, osv. det er dette system jeg beskriver her.

Hvorfor?

Hvis man har et meget stort system, der benytter mange klasser, men hvor kun få af klasserne benyttes på en enkelt side, vil det være optimalt kun at loade de klasser, vi har brug for.

Det vil mindske disk I/O og give PHP mindre kode, at arbejde med og scriptet burde derfor yde bedre.

Hvordan?

Vi benytter ini_set('unserialize_callback_func', callback'); til at registrer en callback funktion, der kaldes hvis unserializeren i PHP finder et objekt, hvor den ikke har klasse definitionen loaded.

Vores callback funktion kan se sådan ud:

function sessionUnserializeCallback($classname){

@include_once("classes/${classname}.php");

}

Funktionen tager et argument $classname, som indeholder navnet på den klasse, som PHP ikke har en klasse definition til. I eksemplet her har vi gemt alle klasse definitioner i mappen "classes", hvor filerne har navne efter de klasser, de definerer.

Dette er selvfølgelig en meget simpelt udgave og kan gøres så kompleks, som man har brug for.

For at demonstrere hvordan det virker har jeg lavet et lille eksempel. Hvis du får fejl, tjek om du har en anden session kørende.

Frederik Sørensen 29/05-2005