2011-08-09 3 views
1

J'ai une classe qui fait des fonctions API (REST). Je voudrais déclarer la variable à l'échelle de la classe variable et statique, donc je ne vais pas récupérer les données encore et encore. (C'est ce que je pense en théorie, pourrait être faux) Beaucoup de méthodes dans la classe auront besoin de ces données. J'utilise ce type de classe mais quelque chose ne me semble pas correct. Il fonctionne, mais (c'est juste une classe d'exemple, pas le vrai code);Variables statiques 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

Il est assez agréable :) Je reviendrais auto :: billets $ et une valeur booléenne, mais il est peut-être juste une question du goût. –

+0

Merci :) En fait, ma fonction est de définir le nombre de variables (je l'ai dépouillé). C'est pourquoi je retournais des booléens. – hergone

Répondre

0

Et singleton? Avec le motif Singleton, vous instanciez votre objet une fois pour que vous l'exploriez une fois.

eq:

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

Il y a un problème, si le nombre réel de billets retournés par http://someurl est égal à zéro? alors if(!self::$tickets) sera toujours vrai même si nous avons déjà rempli le tableau. J'initialiser $tickets avec null:

private static $tickets = null; 

et changer cette condition:

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