JeuWeb - Crée ton jeu par navigateur
[Résolu] comment "externaliser" les paramètres - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] comment "externaliser" les paramètres (/showthread.php?tid=4858)

Pages : 1 2


[Résolu] comment "externaliser" les paramètres - Ter Rowan - 31-05-2010

bonjour

voilà, j'ai une classe qui possède des données statiques paramétrant les calculs

Code PHP :
<?php 
class modActionEnergie
{
// tableau des consommations d'énergie
private static $_consoRef = array
(
//ref fat stress faim soif
REPOS => array( 1.0, -1.5, -1.0, 0.2, 0.1),
NORMAL => array( 1.0, 1.0, 0.4, 0.3, 0.6),
PHYSIQUE => array( 1.0, 1.5, 0.4, 1.0, 1.0),
INTELLECTUEL => array( 1.0, 0.7, 0.4, 0.5, 0.3),
GRATUIT => array( 0.0, 0.0, 0.0, 0.0, 0.0)
);

// tableau des modificateurs de consommation d'énergie
private static $_consoModif = array(
// temps fatigue stress soif faim
ECONOMIE => array( 1.2, 0.6, 0.6, 1.0, 1.0),
RAPIDE => array( 0.8, 1.2, 1.2, 1.1, 1.1),
CONSCIENCIEUX => array( 1.2, 1.0, 1.1, 1.2, 1.2),
);
/*

le code...

*/
}

mais j'aimerais sortir du code de la classe les données (les dits tableaux), afin d'avoir d'un coté le code et de l autre le paramétrage, simple et centralisé

j'ai essayé deux trucs mais aucune ne marche :

include(REP_DONNEES.'refCoutEnergie.php'); à la place de la déclaration

ou la méthode des "include return"

Code PHP :
<?php 
private static $_consoRef = include(REP_DONNEES.'refCoutEnergie.php');


donc je fais appel a vous, comment "sortez" vous le paramétrage ?


RE: comment "externaliser" les paramètres - Sephi-Chan - 31-05-2010

Ça fait l'objet d'un article du Wiki : Où mettre les variables de configuration. Peut-être y trouveras-tu ton bonheur ! Smile

Je pencherais pour un fichier JSON, je n'ai pas trouvé de défaut à cette technique. Smile


Sephi-Chan


RE: comment "externaliser" les paramètres - Shudrum - 31-05-2010

Personnellement, je gère tous mes paramètres en globaux.

Pour ce qui est de ton idée de classe, je te conseil de passer simplement par un héritage :

Code PHP :
<?php 
class actionParam {
var
$coutTaper = 1;
var
$coutDormir = 2;
var
$coutManger = 3;
}

class
action extends actionParam {

public function
taper {
$fatigue += $this->coutTaper;
}

...

}

Pour ce qui est du return include, c'est une bonne idée, mais tu ne peux l'appeller directement.

Tu dois mettre dans ta classe, lors de la construction :

Code PHP :
<?php 
class toto {

var
$nom;

function
__construct() {

$this->nom = include("configToto.php");

}

}



RE: comment "externaliser" les paramètres - Allwise - 31-05-2010

Étant donné que ce sont là des paramètres, tu pourrais les donner en argument au constructeur de la classe, sous forme de tableau ou d'objet.
Sinon, tu peux aussi admettre un argument $config_file, qui taperait vers un fichier externe .php, ou .ini ( cf parse_ini_file ) qui contiendrait les datas. Il suffirait alors d'instancier la classe en passant le chemin vers ce fichier et zou le tout serait chargé.

Ton include ne peut pas fonctionner, un include c'est comme un copier / coller d'un fichier dans un autre. Il faudrait soit que tu le mettes avant la déclaration de ta classe, soit au sein d'une méthode de ta classe. Mais je trouve la solution du .ini plus sexy Wink


RE: comment "externaliser" les paramètres - Shudrum - 31-05-2010

(31-05-2010, 10:59 PM)Allwise a écrit : Ton include ne peut pas fonctionner, un include c'est comme un copier / coller d'un fichier dans un autre.

Nonon, on peut bien appeler un include retournant un résultat précis.


RE: comment "externaliser" les paramètres - Allwise - 31-05-2010

Ah oui effectivement, au temps pour moi. Une pratique que j'avais jamais vu autre part que dans la doc :respect:


RE: comment "externaliser" les paramètres - Ter Rowan - 01-06-2010

merci pour vos premières réponses

alors Shudrum, l'héritage, je n'aime pas car si j'ai des paramètres dans 50 classes différentes, elles mêmes avec déjà un héritage structuré, ça me casse tout et surtout c'est tout aussi bordélique et "inaccessible" que dans les classes elles mêmes

Allwise, ce sont des données statiques donc lors de la constuction des classes, celui qui instancie n'a pas a se soucier de ces informations, ni même où sont stockés les éléments. Je n'utiliserais donc pas la méthode

Sephi, pour le wiki, ben justement j'étais parti sur une solution "légère" avec le return include cependant mon problème vient du côté statiquedes données que je souhaite stocker

est ce que finalement (quelle que soit la source array xml, json, etc...) je ne dois pas déclarer mes variables static à null, et dans le constructeur faire un truc du genre

if ( NULL === self::$leParam)
self::$leParam = lafonctionquivabien(avec l'identifiant qui va bien);


RE: comment "externaliser" les paramètres - Shudrum - 01-06-2010

Je ne comprend pas ce que tu entends pas "inaccessible". Car un fichier ne contenant que des variables avec en plus une ligne pour ouvrir la classe, je ne vois pas en quoi cela fait bordélique.

De plus, j'avais zappé ton envie d'avoir des statics, car l'on peut garder les classe citées ci-dessus sans avoir à hériter des paramètres :

Code PHP :
<?php 
class actionParam {
public static
$coutTaper = 1;
public static
$coutDormir = 2;
public static
$coutManger = 3;
}

class
action {

public function
taper {
$fatigue += actionParam::$coutTaper;
}

...

}



RE: comment "externaliser" les paramètres - Ter Rowan - 01-06-2010

ah c'est vrai que comme ça (on n'est plus dans l'héritage), c'est pas mal (et assez simple à lire qui plus est)

Ca me réglerait bien quelques problèmes que j'envisageais Smile

Vous en pensez quoi vous autres ?


RE: comment "externaliser" les paramètres - Anthor - 01-06-2010

Je préfère la solution que tu donnes avant, couplé avec un argument dans le constructor.

C'est pas plus long et ça permet de surcharger les paramètres. Si besoin d'un exemple, je peux en donner un.