Пример #1
0
 public function getItem($key, &$success = null, $queue = true)
 {
     //check to see if it's already been cached in the class
     $value = parent::getItem($key, $success, $queue);
     if ($success === true) {
         return $value;
     } else {
         $fileName = $this->getFileName($key);
         if ($queue === true && !file_exists($fileName)) {
             if ($this->isQueueInProgress($fileName) === true) {
                 //anonymous function to test if we should continue to wait
                 $condition = function () use($fileName) {
                     return !file_exists($fileName);
                 };
                 $wait = $this->wait($condition);
                 if ($wait === false) {
                     $this->clearQueue($key);
                     $success = false;
                     return null;
                 } else {
                     $success = true;
                     return $this->readFromFile($fileName);
                 }
             } else {
                 $this->queue($fileName);
                 $success = false;
                 return null;
             }
         } else {
             $ttl = $this->getTtl($key);
             if ($ttl < time() && $this->isReCacheInProgress($fileName) === false) {
                 //set the queue
                 $this->reCache($fileName);
                 $success = false;
                 return null;
             } else {
                 $success = true;
                 $value = $this->readFromFile($fileName);
                 return $value;
             }
         }
     }
 }