Я столкнулся как с функциями, так и с методами класса, которые сохраняют загруженные данные в переменную c или свойство класса по идентификатору и проверяют, существует ли идентификатор в переменной / свойстве, прежде чем продолжить. Если идентификатор существует, он возвращает «кэшированные» данные из переменной / свойства. Если это не так, он загружает данные и затем сохраняет их в переменной / свойстве.
class MyProducts {
public $products = array();
И тогда метод загрузчика выглядит так:
public function loadProduct($product_id) {
if(isset($this->products[$product_id])) return $this->products[$product_id];
// otherwise do all the data loading into $product_data; pretend code is
// here to pull data; now store it
$this->products[$product_id] = $product_data;
}
Я также видел, как это делается непосредственно в такой функции:
function loadProduct($product_id) {
static $myproducts = array();
if(isset($myproducts[$product_id])) return $myproducts[$product_id];
// otherwise do all the data loading into $product_data; pretend code is
// here to pull data; now store it
$myproducts[$product_id] = $product_data;
}
Насколько это эффективно и как долго сохраняются "кэшированные" данные? Я попытался прочитать несколько статей на эту тему и все еще в замешательстве. Я знаю, что мы используем memcache, и в некоторых статьях, которые я читал, упоминалось об этом.
Спасибо!