0

バックグラウンド:

ライブ サーバーに PHP Memcached 拡張機能をインストールしました。さまざまな努力にもかかわらず、XAMPP 開発ボックス内に Memcached をインストールできないようです。そのため、次のコードを使用して、Live サーバーでのみ Memcached をインスタンス化しています。

すべてのページに含まれている私の接続ファイル:

// MySQL connection here

// Memcached
if($_SERVER['HTTP_HOST'] != 'test.mytestserver') {
    $memcache = new Memcached();
    $memcache->addServer('localhost', 11211);
}

現時点では、各メソッドをインスタンス化していますが、目的を達成するためのより良い方法があると考えずにはいられず、誰かアイデアがあるかどうか疑問に思っていますか?

のクラスファイル:

class instrument_info {


    // Mysqli connection
    function __construct($link) {
        $this->link = $link;    
    }

function execute_query($query, $server) {

    $memcache = new Memcached();
    $memcache->addServer('localhost', 11211);

    $result = mysqli_query($this->link, $query) or die(mysqli_error($link));
    $row = mysqli_fetch_array($result);

    if($server == 'live') 
    $memcache->set($key, $row, 86400);

 } // Close function


function check_something() {

    $memcache = new Memcached();
    $memcache->addServer('localhost', 11211);

    $query = "SELECT something from somewhere";

    if($_SERVER['HTTP_HOST'] != 'test.mytestserver') { // Live server

        $key = md5($query);
        $get_result = $memcache->get($key);

        if($get_result) {    
            $row = $memcache->get($key);    
        } else { 
            $this->execute_query($query, 'live');           
        }

    } else { // Test Server
        $this->execute_query($query, 'prod');
    }

} // Close function

} // Close Class
4

1 に答える 1

0

インターフェースベースのプログラミングと依存性注入について読むことをお勧めします。これをどのように行うべきかについてのアイデアを与えるかもしれないいくつかのコード例を次に示します。

interface CacheInterface {
  function set($name, $val, $ttl);
  function get($name);
}

class MemCacheImpl implements CacheInterface {
  /* todo: implement interface */
}

class OtherCacheImpl implements CacheInterface {
 /* todo: implement interface */
}

class InstrumentInfo {
  private $cache;
  private $link;

  function __construct($link, $cache) {
    $this->link = $link;
    $this->cache = $cache;
  }

  function someFunc() {
    $content = $this->cache->get('some-id');
    if( !$content )  {
      // collect content somehow
      $this->cache->set('some-id', $content, 3600);
    }
    return $content
  }
}

define('IS_PRODUCTION_ENV', $_SERVER['HTTP_HOST'] == 'www.my-real-website.com');

if( IS_PRODUCTION_ENV ) {
  $cache = new MemCacheImpl();
} else {
  $cache = new OtherCacheImpl();
}

$instrumentInfo = new InstrumentInfo($link, $cache);

ところで。mysqli_query に関しては、実際には同じ問題があり、コードを Mysql データベースと mysqli 拡張機能に依存させています。mysqli_query へのすべての呼び出しも、データベース層を表す独自のクラスに移動する必要があります。

于 2013-02-15T09:32:28.477 に答える