2010-03-09 9 views
2

En supposant que j'ai une classe Config que j'utilise pour accéder aux variables de configuration de partout (Config::X).Ecriture dans des classes statiques dans PHP

Est-il possible d'implémenter une fonction qui peut être appelée depuis l'extérieur de la classe qui ajoute et/ou modifie des propriétés?

Quelque chose comme ceci est ce que je pense:

class Config 
{ 
    const myVar = 'blah'; 
    public static function write($name, $value) 
    { 
     //.... 
    } 
} 
echo Config::myVar; // Clear 

Config::write('test', 'foo'); 
echo Config::test; // Should be foo 

Je l'ai vu quelque chose de similaire à CakePHP mais n'a pas pu trouver la solution. Mon objectif serait de pouvoir écrire dans la classe Config de base à partir de différents fichiers, par exemple: stocker les informations de la base de données dans un fichier séparé.

+0

Il y a beaucoup de différences entre 5.2 et 5.3 à cet égard, donc ce que vous utilisez aura une grande différence sur la façon dont vous pouvez répondre à cette question. Voir http://us2.php.net/manual/fr/language.oop5.static.php – Nicole

+0

Alors parlons de la version 5.2 ici parce que je ne veux pas compter sur la disponibilité de 5.3 sur les hôtes de mon client. – ACIIDRM

Répondre

0

Vous ne pouvez pas modifier les valeurs d'une classe statique. Si vous souhaitez disposer de cette fonctionnalité, vous devez créer une instance de la classe et la stocker dans la session si vous avez besoin que les valeurs persistent sur les pages.

+0

Persister sur les pages? – ACIIDRM

+0

Oui, chaque fois que l'utilisateur accède à une nouvelle page, les modifications apportées aux variables sont perdues, sauf si vous les stockez dans une base de données ou si vous utilisez $ _SESSION. – GSto

0

Votre code semble rendre la fonction d'écriture liée à un nouveau const appelé $ name .... jamais vu cela fait auparavant.

2

Vous ne pouvez pas réaliser cela sans déclarer les variables d'abord, sauf si vous abandonnez des variables statiques et utilisez des implémentations concrètes à la place. Même si vous ne déclarez les variables d'abord, vous devrez les appeler à l'aide `$:

class Config { 

    const $myVar = 'blah'; 
    public static $test; 

    public static function write($name, $value) 
    { 
     //.... 
    } 
} 

Config::write('test', 'foo'); 
echo Config::$test; // Will be foo 

Si vous avez une mise en œuvre concrète, vous pouvez tirer parti __get and __set de sorte que vous ne devez pas déclarer toutes vos variables. Cela signifie que vous devrez transmettre votre objet de configuration si vous en avez besoin quelque part. Si vous trouvez cela ennuyeux, vous pouvez regarder dans dependency injection.

Questions connexes