["a" => "un", "b" => "deux"], "eng" => ["a" => "one", "b" => "two"], ["a" => 1, "b" => 2], ]; function gendata() { msg::note("gendata"); foreach (self::DATA as $key => $item) { msg::info("yield $key"); yield $key => $item; sleep(2); } msg::note("fin gendata"); } function _testRows(iterable $rows) { $count = 0; foreach ($rows as $key => $row) { msg::info("got $key => {a={$row["a"]}, b={$row["b"]}}"); $count++; } self::assertSame(3, $count); } function _testGet(string $dataId, callable $gencompute) { msg::section($dataId); cache::nc(); msg::step("premier"); $rows = cache::get($dataId, $gencompute()); $this->_testRows($rows); msg::step("deuxième"); $rows = cache::get($dataId, $gencompute()); $this->_testRows($rows); msg::step("vider le cache"); cache::nc(true, true); msg::step("premier"); $rows = cache::get($dataId, $gencompute()); $this->_testRows($rows); msg::step("deuxième"); $rows = cache::get($dataId, $gencompute()); $this->_testRows($rows); } function testGetStatic() { $this->_testGet("getStatic", function() { return static function () { msg::note("getdata"); return self::DATA; }; }); } function testGetGenerator() { $this->_testGet("getGenerator", function() { return $this->gendata(); }); } function testAll() { } }