2011-01-04 3 views
0

Ok, je suis coincé là-dessus, pourquoi n'ai-je pas ce dont j'ai besoin?Méthodes statiques nécessitant var

class config 
{ 

    private $config; 

    # Load configurations 
    public function __construct() 
    { 
     loadConfig('site'); // load a file with $cf in it 
     loadConfig('database'); // load another file with $cf in it 
     $this->config = $cf; // $cf is an array 
     unset($cf); 
    } 

    # Get a configuration 
    public static function get($tag, $name) 
    { 
     return $this->config[$tag][$name]; 
    } 
} 

Je reçois ceci:

Fatal error: Using $this when not in object context in [this file] on line 22 [return $this->config[$tag][$name];] 

et je dois appeler la méthode de cette façon: config::get() ...

+0

Les fonctions statiques sont appelées dans le contexte de la classe et ne font référence à aucune instance particulière. – zzzzBov

Répondre

2

public static function get

doivent être

public function get

Vous ne pouvez pas utiliser $this dans les méthodes statiques.

ÉDITÉ

je pouvais le faire, mais je ne suis pas sûr que ce soit la meilleure conception pour vous.

class config 
{ 

    static private $config = null; 

    # Load configurations 
    private static function loadConfig() 
    { 
     if(null === self::$config) 
     { 
      loadConfig('site'); // load a file with $cf in it 
      loadConfig('database'); // load another file with $cf in it 
      self::$config = $cf; // $cf is an array 
     } 
    } 

    # Get a configuration 
    public static function get($tag, $name) 
    { 
     self::loadConfig(); 
     return self::$config[$tag][$name]; 
    } 
} 
+0

Je dois appeler la méthode get() en tant que config :: get() sans l'instance. – Shoe

+0

Ensuite, la propriété $ config doit être statique et, dans ce cas, vous ne pouvez pas avoir de constructeur. Voir cet exemple http://code.google.com/p/simple-php-framework/source/browse/trunk/includes/class.config.php?spec=svn199&r=199 –

1

Le problème est que vous êtes Using $this when not in object context ... Déclarant une méthode statique supprime la possibilité d'utiliser la $this -Référence dans la méthode.

0

Il n'y a pas de référence $this dans les méthodes statiques car elles appartiennent à la classe. Les méthodes statiques ne peuvent accéder qu'aux membres statiques, donc s'il est important que get() soit une méthode statique, faites $this->config un membre statique et return self::$config[$tag][$name]. Cependant, le mot-clé static rend les méthodes accessibles sans une instance de la classe et je conseillerais soit de rendre non-static get(), soit de faire de la classe un singleton (en fonction de la façon dont vous souhaitez l'utiliser).