5

memcache サーバーと対話するためのクラスがあります。データを挿入、削除、取得するためのさまざまな機能があります。もともと各関数は を呼び出していましたmemcache_connect()が、これは不要でした。たとえば、次のようになります。

mc->insert()  
mc->get()  
mc->delete() 

3 つの memcache 接続を作成します。クラスのコンストラクトを作成することで、これを回避しました。

function __construct() {
    $this->mem = memcache_connect( ... );
}

次に$this->mem、リソースが必要な場所で使用するため、3 つの関数のそれぞれが同じmemcache_connectリソースを使用します。

これは問題ありませんが、他のクラス内でクラスを呼び出すと、たとえば次のようになります。

class abc
{
    function __construct() {
        $this->mc = new cache_class;
    }
}    
class def
{
    function __construct() {
        $this->mc = new cache_class;
    }
}

memcache_connect1 つしか必要としないのに、まだ 2 つの呼び出しを行っています。

グローバルでこれを行うことができますが、必要がない場合は使用しないことをお勧めします。

グローバルの実装例:

$resource = memcache_connect( ... );

class cache_class
{
    function insert() {
        global $resource;
        memcache_set( $resource , ... );
    }
    function get() {
        global $resource;
        return memcache_get( $resource , ... );
    }

}

そうすると、クラスが何回呼び出されても、 への呼び出しは 1 回だけになりますmemcache_connect

これを行う方法はありますか、それともグローバルを使用する必要がありますか?

4

4 に答える 4

9

memcache の唯一のインスタンスを取得するために、シングルトン パターンを使用して別のクラスをコーディングします。このような -

class MemCache 
{ 
  private static $instance = false;   
  private function __construct() {}

  public static function getInstance()
  { 
    if(self::$instance === false)
    { 
      self::$instance = memcache_connect(); 
    } 

    return self::$instance; 
  } 
}

と使用法 -

$mc = MemCache::getInstance();
memcache_get($mc, ...)
...
于 2009-02-15T11:41:56.587 に答える
5

MC インスタンスを渡します。

class abc
{
    function __construct($mc) {
        $this->mc = $mc;
    }
}    
class def
{
    function __construct($mc) {
        $this->mc = $mc;
    }
}

$mc = new cache_class;
$abc = new abc($mc);

于 2009-02-15T11:36:31.670 に答える
2

ここで静的プロパティを探していると思います。

class mc {
    private static $instance;

    public static function getInstance() {
        if (self::$instance== null) {
            self::$instance= new self;
        }
        return self::$instance;
    }

    private function __construct() {
        $this->mem = memcache_connect(...);
    }
}

これは、基本的なシングルトン パターンを実装します。オブジェクト call を構築する代わりにmc::getInstance()シングルトンを見てください。

于 2009-02-15T11:45:36.470 に答える