2011-08-09 126 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(); 
     ... 
    } 
} 

与单例模式你实例化你的对象一次,所以你爬一次票。

EQ:

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

有一个问题,如果http://someurl退票的实际数字是多少为零?那么即使我们已经填充了阵列,if(!self::$tickets)也将始终为真。我会null初始化$tickets

private static $tickets = null; 

和更改条件:

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