La Pause Café du Forum Programmation [PART 2]

Han le vieux last à 23h54 :etonne:
Bon beh bonjour, bon réveil tout le monde :hello:

Firstz :smiley:

Yep yep :hello:

plop plop :hello:

Pas mal :o …

t’as pris ça sur excusesbidons.fr ? :ane:

Moi j’aimais bien le papi-clubic :confused: !
Bon, j’dois trouver un autre sujet déprime, vous avez une idée? =X

Petite question auxiliaire sur la portée des variables en PHP :
M’étant mis à la POO depuis peu, j’ai un petit problème quant à la portée des variables à l’intérieur des méthodes, j’ai un fichier qui contient uniquement des variables utiles pour l’ensemble du site, comment puis-je récupérer ces variables dans mes méthodes sans user du redondant global $mavar; en début de ces mêmes méthodes? Si c’est impossible, est-il déjà possible de rendre cette variable global dans l’ensemble de la classe?
Edité le 14/05/2008 à 15:25

www.dailymotion.com…

Faut pas faire chier mamie :smiley:

DarkCham:

  1. non, global ça ne porte que dans les méthodes/fonctions
  2. utilise des tableaux, genre $config; ça t’évite de faire global $mavar1, $mavar2, mais juste $config
  3. si tu veux rendre global une variable, tu peux tenter une référence:

public function __construct() {global $config; $this->config = &$config; }

et faire appel à ta variable « globale » ainsi: $this->config…

vraiment chiant donc;

(ah, et Firefox 3 restaure même le contenu des formulaires quand il plante)

Soit tu utilise des constantes ([url:php=define]define()[/url]).
Soit tu fous toutes ces variables utiles dans un array (e.g. $CFG) et n’a qu’à faire global $CFG; pour avoir accès à chacune.
Sinon, j’ignore si tu peux faire un global dans le corps de la classe (je parle du corps de la classe où l’on déclare membres et méthodes et non du corps des méthodes), par contre tu peux créer des membres privés pour celles qui te serviront dans ta classes (en usant d’un global dans le constructeur pour les récupérer une fois pour toute, bien que je pense que le mieux serait de les refiler au constructeur : plus propre).
Sinon, tu te fais une classe statique ^^ :

class SystemConfig {
	public static $contact_email = 'darkcham@members.clubic.com';
	public static $base_url = 'http://www.clubic.com/forum/';
	// etc.
}

echo 'L’adresse de contact est ', SystemConfig::$contact_email, '.';

Avec le gros défaut de ne pas pouvoir y foutre des tableaux « dynamique » (ie: non constants), ou d’objets.

Personnellement pour ce qui fait partie de la conf maintenant en regle général je me fait une petite classe de type Singleton, avec les methode d’acces et si besoin de modification, apres le stoquage derriere je m’enfout un peu, je peux parfois utiliser simplement des tableau associatif, parfois une structure plus complexe à l’image de la class Config de Zend.

Ok, donc il n’y a pas vraiment de manière de procéder proprement et simplement :/!
J’vais tester un truc.


Bon j'ai rien trouvé de mieux, j'ai seulement constaté une alternative à Sans-Nom, plus que de globaliser la variable dans le constructeur, on peut tout aussi créer un classe de définition de variable, et appeler les autres classes comme extension de cette dernière.

Après je pense que Raynor tu as pris le problème à l’envers dans ton exemple, et de plus ta variable n’est même pas accessible en dehors de la classe.

TheGuit j’ai pas compris concrètement ce que tu faisais :confused: ?
Edité le 14/05/2008 à 19:40

Heu… si :heink: (ou alors j’ai tout raté en POO).
Sinon, l’idée d’hériter d’une classe config n’est pas trop mal : tu te fais ton Object Java à toi duquel dérivent toutes tes classes système/moteur.

Si Dark : SystemConfig::$contact

Concretement comment je fais ? un truc du genre :


class Configuration {
	private static $instance = null;

	private $conf = null;

	private __construct() {
		$this->conf = array();
		// ici tu charge ton fichier ou tu défini les valeur de base un truc simple est d'avoir un tableau associatif a la fin
	}

	public static getInstance() {
		if(self::instance !== null) {
			self::instance = new Configuration();
		}
		return self::instance;
	}

	public static getValue($val) {
		return self::getInstance()->getVal($val);
	}

	public getVal($val) {
		if(is_array($this->conf) && array_key_exists($val, $this->conf)) {
			return $this->conf[$val];
		}
		else {
			return null;
		}
	}
}

Apres tu t’en sert n’importe ou dans n’importe quel classe, n’importe quel fonction, bref ou tu veux en faisant simplement :

 Configuration::getvalue('clé');

Edité le 15/05/2008 à 12:42

TheGuit > Petite erreur, la méthode getVal($val) ne doit-elle pas être d’instance (non-statique) ?

Raynor a raison en effet, la seule méthode qui a besoin d’être statique est celle qui te permet de récupérer l’instance.
Et en passant pour la méthode getValue(), tu peux appeler directement getVal($val); Pas besoin de récupérer l’instance, tu es déjà dans l’objet. (et l’utilité de faire une méthode public qui appelle une autre méthode public avec le même paramètre :smiley: )

Autant pour moi, je m’étais trompé dans la casse de ma variable sur mon fichier de test :pfff:


Voilà c'est un système façon TheGuit que j'essayais de faire mais je voyais pas du tout comment mettre ça en forme. J'ai une autre idée à exploiter, je testerais demain. Merci quand même à tous =) !

Bon dans tous les cas, j’vais dormir, i’m so tired :sommeil2:

idem !

BN all :wink:

PS : suis allé voir jackpot, et c’était marrant. Rien d’original niveau mise en scène ou histoire (c’est que du classique : présentation des persos, rencontre, « suprise », on se déteste, on commence à s’aimer, hop boulette l’un des deux aime plus l’autre, et puis ils vécurent heureux…).

Mais bon j’ai bien rigolé, ya de bons trucs ^^