2011-08-09 22 views
1

私はいくつかのAPI(REST)関数を実行するクラスを持っています。私は可変クラス全体の変数と静的を宣言したいので、データを何度も何度もフェッチしません。 (これは理論的には間違っていると思います)クラスの多くのメソッドにはそのデータが必要です。PHP静的変数

私はこのタイプのクラスを使用していますが、何かが正しく見えません。これは動作していますが、 (これは単なる実例コードであり、実際のコードではありません)。

class Some_Process { 

    private static $tickets = array(); 

    private function _get_tickets() { 
     if(!self::$tickets) { 
      $curl = curl_init(); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
      curl_setopt($curl, CURLOPT_URL, 'http://someurl'); 

      self::$tickets = json_decode(curl_exec($curl)); 
      if(!self::$tickets) { 
       return FALSE; 
      } 
      return TRUE; 
     } 
    } 
    function process_tickets() { 
     self::_get_tickets(); 
     //here I start using the varible 
     do some job on .. self::$tickets; 
    } 
} 
+1

それは十分にうれしいです:)私は、自己:: $チケットではなくブール値を返しますが、それは多分問題です味の –

+0

ありがとう:)実際には私の関数は変数の数を設定しています(私はそれを取り除きました)。だからこそ、私はブール値を返すのです。 – hergone

答えて

0

シングルトンパターンとは?

class Some_Process { 
    protected static $_instance; 
    private $_tickets = array(); 

    public static function initialiaze() { 
     $curl = curl_init(); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
     curl_setopt($curl, CURLOPT_URL, 'http://someurl'); 

     self::getInstance(json_decode(curl_exec($curl)); 
    } 

    public static function getInstance($tickets = null) { 
     if (!self::$_instance) { 
      self::$_instance = new self($tickets); 
     } 

     return self::$_instance; 
    } 

    private function __constructor($tickets) { 
     $this->_$tickets = $tickets; 
    } 

    public function getTickets() { 
     return $this->_tickets; 
    } 

    public function processTickets() { 
     $this->_tickets(); 
     ... 
    } 
} 

シングルトンパターンでは、オブジェクトを一度インスタンス化してチケットを1回クロールします。

EQ:

Some_Process::initialize(); 
Some_Process::getInstance()->processTickets(); 
1

http://someurlによって返されたチケットの実際の数がゼロであればどのような一つの問題は、ありますか? if(!self::$tickets)は、すでに配列を塗りつぶしても常にtrueになります。

private static $tickets = null; 

をしてまでその状態を変更します:私はnull$ticketsを初期化します

if(self::$tickets === null) { 
    self::$tickets = array(); 
    ... 
}