Bu kod küçük yapmak için doktorunun?

3 Cevap php

Ben bu iki yöntem var

private function cacheAdd($id,$data)
{
   $this->minicache->set($id,$data);
}

private function cacheGet($id)
{
   return $this->minicache->get($id);
}

I öğeler önbelleğe olup olmadığını kontrol etmek isterseniz ben böyle bir şey yapmak zorunda, her zaman:

public function getFriendIds()
  {

 $info = $this->cache->minicache->getInfo("getFriendIds"); // if its an array then it is cached
    if(is_array($info))
    {
      return $this->cache->cacheGet("getFriendIds"); // return the cached object
    }
     // from here items wasnt cached
    else
    {
      $this->cache->cacheAdd("getFriendIds",$this->twitter->getFriendIds());  // so add to cache
      return $this->cache->cacheGet("getFriendIds"); // and return the cached items
    }
  }

Ama bu hakkı yapmak için basit bir yöntem olduğunu düşünüyorum?

Ben böyle bir şey düşündüm:

$this->cache->docache($this->myitems());

ve yöntem docache sadece yöntemi alır ve madde zaten nasıl yapılabilir önbelleğe olup olmadığını dize ve kontrollere methodName dönüştürür?

EDIT:

Bu yöntemi uygulayan docache

   public function docache($id,$data)
    {
      $info = $this->minicache->getInfo($id);

      if(is_array($info))
      {
      return $this->cache->cacheGet($id); // return the cached object
      }

      else
      {
        $this->cacheAdd($id,$data);  // so add to cache
        return $this->cacheGet($id); // and return the cached items
      }

    }

ve i bunu yöntemi çağırmak istiyorum.

  public function getFriendIds()
  {
      return $this->cache->docache("getFriendIds",$this->twitter->getFriendIds());
  }

Hayır, bu çok küçük değil mi?

3 Cevap

I getFriendIds yöntemlerin bir takım birinin benzer bir desen hepsi götürün ve ne yapmak istediğiniz hepsini yapmak tek bir satır (veya çok) uzun. Bu durumda, getFriendIds arzu yöntemi sizi refactor olabilir:

protected function memoize($name, $callable, $args=array()) {
    $info = $this->cache->minicache->getInfo($name); // if its an array then it is cached
    if(is_array($info)) {
        return $this->cache->cacheGet($name); // return the cached object
    } else {
        $this->cache->cacheAdd($name, call_user_func_array($callable, $args));
        return $this->cache->cacheGet($name); // and return the cached items
    }
}

public function getFriendIds() {
    $this->memoize(__METHOD__, array($this->twitter, __FUNCTION__));
}

Denenmemiş, bu nedenle bazı sorunlar olabilir.

Siz de burada birkaç satır kaydedebilirsiniz.

public function docache($id,$data)
{
    $info = $this->minicache->getInfo($id);

    if(!is_array($info))
    {
        $this->cacheAdd($id,$data);  // so add to cache
    }

    return $this->cache->cacheGet($id); // return the cached object
}

You could make it a little smaller (and faster) this way: It only prevents the $info variable from being stored, so it's a little bit faster. ;) And the code is much shorter :p

 public function docache($id,$data){
  if(!is_array($this->minicache->getInfo($id))) $this->cacheAdd($id,$data);  // add to cache if theres none
  return $this->cacheGet($id); // and return the cached items
}

Edit: oh, we posted about the same code at the same time :p