2016-09-23 3 views
-1

Dans une classe PHP, existe-t-il un moyen de définir une variable globale qui n'a pas besoin d'être appelée dans chaque fonction?PHP: définir une variable globale dans une classe

Par exemple, j'ai une variable appelée $settings qui contient un tableau de valeurs:

Array([option_1] => on, [option_2] => on, [option_3] => off) 

La fonction get_option() vient de WordPress. Les valeurs du tableau $settings déterminent les fonctions à exécuter:

class My_Class { 

    public function __construct() { 
     # Get array of options 
     $settings = get_option('my_options'); 

     if (is_array($settings) || is_object($settings)) { 
      if ($settings['option_1'] == 'on') { 
       add_action('tag_1', array($this, 'function_1')); 
      } 

      if ($settings['option_2'] == 'on') { 
       add_action('tag_2', array($this, 'function_2')); 
      } 
     } 
    } 

    public function function_1() { 
     # Call the array of options again 
     $settings = get_option('my_options'); 

     echo 'This option is ' . $settings['option_1']; 
    } 

    public function function_2() { 
     # Code here... 
    } 

new My_Class(); 

Cependant, j'appelle la ligne suivante deux fois dans ma __construct() et function_1():

$settings = get_option('my_options'); 

Au lieu d'appeler cette variable deux fois dans deux fonctions différentes , quelle est la bonne façon d'appeler la même variable qui peut être utilisée dans différentes fonctions de ma classe? J'ai essayé d'ajouter la fonction variable $settings juste au-dessous du class My_Class, mais cela ne fonctionne pas:

class My_Class { 

    global $settings = get_option('my_options'); 
    # Rest of the code below... 

Répondre

1

Vous pouvez déclarer les paramètres $ comme une propriété de classe

protected $settings; 

puis à l'intérieur __construct

$this->settings = get_option('my_options'); 

Vous pouvez ensuite y accéder n'importe où dans la classe en utilisant $this->settings

public function function_1() { 
    echo 'This option is ' . $this->settings['option_1']; 
} 

Pour plus de détails sur properties, vous pouvez vous référer à la documentation PHP http://php.net/manual/en/language.oop5.properties.php