compute; return $compute !== null? $compute(): null; } /** * écrire le résultat de la fonction $compute dans le fichier si le cache a * expiré ou si le fichier n'existe pas. sinon, la fonction n'est pas appelée */ function put(callable $compute, bool $noCache=false) { $this->compute = $compute; try { if ($this->shouldUpdate($noCache)) { try { $data = $compute(); if ($data instanceof Generator) { #XXX ne pas utiliser iterator_to_array() qui semble avoir un souci # avec les générateurs imbriqués $items = []; foreach ($data as $item) { $items[] = $item; } $data = $items; } if ($this->shouldCache($data)) { $this->save($data, $this->ppFile); } else { # ne pas garder le fichier s'il ne faut pas mettre en cache unlink($this->ppFile); } } catch (Exception $e) { // si une erreur se produit, ne pas garder le fichier unlink($this->ppFile); throw $e; } } else { $data = $this->load($this->ppFile); } return $data; } finally { $this->cleanup(); } } }