PHP: implementare la memoization con le sessioni

PHP: implementare la memoization con le sessioni

In questo articolo vedremo come implementare la memoization in PHP usando le sessioni.

La memoization consiste nel memorizzare il risultato di un'operazione dispendiosa a livello di risorse quando il valore di input fornito รจ il medesimo rispetto all'operazione precedente.

Consideriamo la seguente funzione che calcola il fattoriale di un numero intero.

function factorial($number = 1) {
    if(!is_int($number) || $number <= 1) {
        return 1;
    }
    return $number * factorial($number - 1);
}

Implementando un ipotetico endpoint di una API, sarebbe opportuno che qualora il valore di input fosse lo stesso, il nostro codice restituisse il valore di output memorizzato nella cache senza dover effettuare nuovamente il calcolo.

Possiamo usare le sessioni nel modo seguente:

session_start();

$input_num = trim($_POST['number']);

if(array_key_exists($input_num, $_SESSION)) {
    echo $_SESSION[$input_num];
    exit;
}
$num = intval($input_num);
$result = factorial($num);
$_SESSION[$input_num] = $result;

echo $result;
exit;

Quindi se la prima volta inviamo 10 come valore, verifichiamo che tale valore non esista come chiave dell'array $_SESSION e memorizziamo il risultato della funzione factorial() nella sessione. Se successivamente dovessimo inviare lo stesso valore, restituiremmo il valore memorizzato nella sessione senza effettuare di nuovo il calcolo.

Torna su