我有一个与memcache服务器交互的类.我有不同的功能来插入,删除和检索数据.最初每个函数都调用了memcache_connect(),但这是不必要的,例如:
mc->insert()  
mc->get()  
mc->delete() 
会做三个memcache连接.我通过为类创建一个构造来解决这个问题:
function __construct() {
    $this->mem = memcache_connect( ... );
}
然后$this->mem在需要资源的任何地方使用,因此三个函数中的每一个都使用相同的memcache_connect资源.
这没关系,但是如果我在其他类中调用类,例如:
class abc
{
    function __construct() {
        $this->mc = new cache_class;
    }
}    
class def
{
    function __construct() {
        $this->mc = new cache_class;
    }
}
然后memcache_connect,当它只需要一个时,它仍然会进行两次调用.
我可以用全局变量做到这一点,但如果我不需要,我宁愿不使用它们.
示例全局实现:
$resource = memcache_connect( ... );
class cache_class
{
    function insert() {
        global $resource;
        memcache_set( $resource , ... );
    }
    function get() {
        global $resource;
        return memcache_get( $resource , ... );
    }
}
然后,无论班级被叫多少次,都只会有一次打电话memcache_connect.
有没有办法做到这一点,还是我应该使用全局变量?
我会使用单例模式编写另一个类来获取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, ...)
...
传入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);
等等
| 归档时间: | 
 | 
| 查看次数: | 5696 次 | 
| 最近记录: |