Comment "nommer" une variable

Eléphanteau du PHP | 38 Messages

23 nov. 2008, 19:35

Bonjour a tous!

J'ai fait ce petit script qui donne des valeurs selon le niveau du batiment:
<?php
session_start();

include("class_batiments.php");


$centre_de_commandement = new Batiment ();


if ( $centre_de_commandement->niveau_du_batiment[1] ) {
$centre_de_commandement->cout_de_population = 10;
$centre_de_commandement->cout_en_bois = 180;
$centre_de_commandement->cout_en_pierre = 160;
$centre_de_commandement->cout_en_fer = 140;
$centre_de_commandement->points_obtenus = 20;

}

if ( $centre_de_commandement->niveau_du_batiment[2] ) {

$centre_de_commandement->cout_de_population = 12;
$centre_de_commandement->cout_en_bois = 226;
$centre_de_commandement->cout_en_pierre = 204;
$centre_de_commandement->cout_en_fer = 176;
$centre_de_commandement->points_obtenus = 24;
}

if ( $centre_de_commandement->niveau_du_batiment[3] ) {

$centre_de_commandement->cout_de_population = 14;
$centre_de_commandement->cout_en_bois = 286;
$centre_de_commandement->cout_en_pierre = 260;
$centre_de_commandement->cout_en_fer = 222;
$centre_de_commandement->points_obtenus = 28;
}
if ( $centre_de_commandement->niveau_du_batiment[4] ) {

$centre_de_commandement->cout_de_population = 16;
$centre_de_commandement->cout_en_bois = 360;
$centre_de_commandement->cout_en_pierre = 332;
$centre_de_commandement->cout_en_fer = 280;
$centre_de_commandement->points_obtenus = 34;
}

if ( $centre_de_commandement->niveau_du_batiment[5] ) {

$centre_de_commandement->cout_de_population = 18;
$centre_de_commandement->cout_en_bois = 454;
$centre_de_commandement->cout_en_pierre = 422;
$centre_de_commandement->cout_en_fer = 352;
$centre_de_commandement->points_obtenus = 42;
}

if ( $centre_de_commandement->niveau_du_batiment[6] ) {

$centre_de_commandement->cout_de_population = 22;
$centre_de_commandement->cout_en_bois = 572;
$centre_de_commandement->cout_en_pierre = 540;
$centre_de_commandement->cout_en_fer = 444;
$centre_de_commandement->points_obtenus = 50;
}

if ( $centre_de_commandement->niveau_du_batiment[7] ) {

$centre_de_commandement->cout_de_population = 26;
$centre_de_commandement->cout_en_bois = 720;
$centre_de_commandement->cout_en_pierre = 688;
$centre_de_commandement->cout_en_fer = 560;
$centre_de_commandement->points_obtenus = 60;
}
if ( $centre_de_commandement->niveau_du_batiment[8] ) {

$centre_de_commandement->cout_de_population = 30;
$centre_de_commandement->cout_en_bois = 908;
$centre_de_commandement->cout_en_pierre = 876;
$centre_de_commandement->cout_en_fer = 706;
$centre_de_commandement->points_obtenus = 72;
}
if ( $centre_de_commandement->niveau_du_batiment[9] ) {

$centre_de_commandement->cout_de_population = 36;
$centre_de_commandement->cout_en_bois = 1144;
$centre_de_commandement->cout_en_pierre = 1118;
$centre_de_commandement->cout_en_fer = 890;
$centre_de_commandement->points_obtenus = 86;
}
if ( $centre_de_commandement->niveau_du_batiment[10] ) {

$centre_de_commandement->cout_de_population = 42;
$centre_de_commandement->cout_en_bois = 1440;
$centre_de_commandement->cout_en_pierre = 1424;
$centre_de_commandement->cout_en_fer = 1120;
$centre_de_commandement->points_obtenus = 104;
}
if ( $centre_de_commandement->niveau_du_batiment[11] ) {

$centre_de_commandement->cout_de_population = 48;
$centre_de_commandement->cout_en_bois = 1816;
$centre_de_commandement->cout_en_pierre = 1816;
$centre_de_commandement->cout_en_fer = 1412;
$centre_de_commandement->points_obtenus = 124;
}
if ( $centre_de_commandement->niveau_du_batiment[12] ) {

$centre_de_commandement->cout_de_population = 56;
$centre_de_commandement->cout_en_bois = 2228;
$centre_de_commandement->cout_en_pierre = 2952;
$centre_de_commandement->cout_en_fer = 1780;
$centre_de_commandement->points_obtenus = 148;
}
if ( $centre_de_commandement->niveau_du_batiment[13] ) {

$centre_de_commandement->cout_de_population = 66;
$centre_de_commandement->cout_en_bois = 2882;
$centre_de_commandement->cout_en_pierre = 2952;
$centre_de_commandement->cout_en_fer = 2242;
$centre_de_commandement->points_obtenus = 178;
}
if ( $centre_de_commandement->niveau_du_batiment[14] ) {

$centre_de_commandement->cout_de_population = 76;
$centre_de_commandement->cout_en_bois = 3632;
$centre_de_commandement->cout_en_pierre = 3764;
$centre_de_commandement->cout_en_fer = 2824;
$centre_de_commandement->points_obtenus = 214;
}
if ( $centre_de_commandement->niveau_du_batiment[15] ) {

$centre_de_commandement->cout_de_population = 90;
$centre_de_commandement->cout_en_bois = 4576;
$centre_de_commandement->cout_en_pierre = 4800;
$centre_de_commandement->cout_en_fer = 3558;
$centre_de_commandement->points_obtenus = 256;
}
if ( $centre_de_commandement->niveau_du_batiment[16] ) {

$centre_de_commandement->cout_de_population = 106;
$centre_de_commandement->cout_en_bois = 5766;
$centre_de_commandement->cout_en_pierre = 6120;
$centre_de_commandement->cout_en_fer = 4484;
$centre_de_commandement->points_obtenus = 308;
}
if ( $centre_de_commandement->niveau_du_batiment[17] ) {

$centre_de_commandement->cout_de_population = 124;
$centre_de_commandement->cout_en_bois = 7264;
$centre_de_commandement->cout_en_pierre = 7804;
$centre_de_commandement->cout_en_fer = 5650;
$centre_de_commandement->points_obtenus = 370;
}
if ( $centre_de_commandement->niveau_du_batiment[18] ) {

$centre_de_commandement->cout_de_population = 144;
$centre_de_commandement->cout_en_bois = 9154;
$centre_de_commandement->cout_en_pierre = 9950;
$centre_de_commandement->cout_en_fer = 7120;
$centre_de_commandement->points_obtenus = 444;
}
if ( $centre_de_commandement->niveau_du_batiment[19] ) {

$centre_de_commandement->cout_de_population = 168;
$centre_de_commandement->cout_en_bois = 11534;
$centre_de_commandement->cout_en_pierre = 12686;
$centre_de_commandement->cout_en_fer = 8970;
$centre_de_commandement->points_obtenus = 532;
}
if ( $centre_de_commandement->niveau_du_batiment[20] ) {

$centre_de_commandement->cout_de_population = 198;
$centre_de_commandement->cout_en_bois = 14532;
$centre_de_commandement->cout_en_pierre = 16174;
$centre_de_commandement->cout_en_fer = 11302;
$centre_de_commandement->points_obtenus = 638;
}
if ( $centre_de_commandement->niveau_du_batiment[21] ) {

$centre_de_commandement->cout_de_population = 232;
$centre_de_commandement->cout_en_bois = 18310;
$centre_de_commandement->cout_en_pierre = 20622;
$centre_de_commandement->cout_en_fer = 14240;
$centre_de_commandement->points_obtenus = 766;
}
if ( $centre_de_commandement->niveau_du_batiment[22] ) {

$centre_de_commandement->cout_de_population = 170;
$centre_de_commandement->cout_en_bois = 23070;
$centre_de_commandement->cout_en_pierre = 26292;
$centre_de_commandement->cout_en_fer = 17944;
$centre_de_commandement->points_obtenus = 920;
}
if ( $centre_de_commandement->niveau_du_batiment[23] ) {

$centre_de_commandement->cout_de_population = 316;
$centre_de_commandement->cout_en_bois = 29068;
$centre_de_commandement->cout_en_pierre = 33524;
$centre_de_commandement->cout_en_fer = 22608;
$centre_de_commandement->points_obtenus = 1104;
}
if ( $centre_de_commandement->niveau_du_batiment[24] ) {

$centre_de_commandement->cout_de_population = 370;
$centre_de_commandement->cout_en_bois = 36626;
$centre_de_commandement->cout_en_pierre = 42742;
$centre_de_commandement->cout_en_fer = 28488;
$centre_de_commandement->points_obtenus = 1324;
}
if ( $centre_de_commandement->niveau_du_batiment[25] ) {

$centre_de_commandement->cout_de_population = 432;
$centre_de_commandement->cout_en_bois = 46150;
$centre_de_commandement->cout_en_pierre = 54496;
$centre_de_commandement->cout_en_fer = 35894;
$centre_de_commandement->points_obtenus = 1590;
}
if ( $centre_de_commandement->niveau_du_batiment[26] ) {

$centre_de_commandement->cout_de_population = 506;
$centre_de_commandement->cout_en_bois = 58148;
$centre_de_commandement->cout_en_pierre = 69482;
$centre_de_commandement->cout_en_fer = 45226;
$centre_de_commandement->points_obtenus = 1908;
}
if ( $centre_de_commandement->niveau_du_batiment[27] ) {

$centre_de_commandement->cout_de_population = 592;
$centre_de_commandement->cout_en_bois = 73266;
$centre_de_commandement->cout_en_pierre = 88590;
$centre_de_commandement->cout_en_fer = 56986;
$centre_de_commandement->points_obtenus = 2290;
}
if ( $centre_de_commandement->niveau_du_batiment[28] ) {

$centre_de_commandement->cout_de_population = 694;
$centre_de_commandement->cout_en_bois = 92316;
$centre_de_commandement->cout_en_pierre = 112952;
$centre_de_commandement->cout_en_fer = 71802;
$centre_de_commandement->points_obtenus = 2748;
}
if ( $centre_de_commandement->niveau_du_batiment[29] ) {

$centre_de_commandement->cout_de_population = 812;
$centre_de_commandement->cout_en_bois = 116318;
$centre_de_commandement->cout_en_pierre = 144014;
$centre_de_commandement->cout_en_fer = 90470;
$centre_de_commandement->points_obtenus = 3296;
}
if ( $centre_de_commandement->niveau_du_batiment[30] ) {

$centre_de_commandement->cout_de_population = 950;
$centre_de_commandement->cout_en_bois = 146560;
$centre_de_commandement->cout_en_pierre = 183618;
$centre_de_commandement->cout_en_fer = 113992;
$centre_de_commandement->points_obtenus = 3956;
}


?>

class batiment:
<?php
session_start();

class Batiment {

public $cout_de_population = array ();

public $cout_en_bois = array ();

public $cout_en_pierre = array ();

public $cout_en_fer = array ();

public $niveau_du_batiment = array ("0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30");

public $points_obtenus = array ();
}





?>
Comment "nommer" cout_en_fer du centre de commandement au niveau 4? (par exemple^^)

Mammouth du PHP | 1668 Messages

23 nov. 2008, 20:21

Bonjour,

tu peux surchargé __construct avec comme paramètre le niveau et le type de bâtiment et faire un tableau associatif (niveau => coût) qui attribut directement les coût aux attributs...

J'ai été interrompu :
<?php
class batiment
{
   public $cout;

   public function __construct($niveau)
   {
      $couts=array(0 => 10, 1 => 25, 2 => 100 /* ... */);
      if(array_key_exist($niveau, $couts) $this->cout=$couts[$niveau];
      else return false;
   }
}
?>
Modifié en dernier par katagoto le 23 nov. 2008, 20:34, modifié 1 fois.
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 185 Messages

23 nov. 2008, 20:22

Si j'étais toi, étant donné que le coût en ressource et les points obtenus changent en fonction du niveau, j'aurais fais un tableau avec pour index le niveau et pour valeur un autre tableau contenant ces informations...

Exemple :
$caracteristiques[1]['cout']['population'] = 10;
$caracteristiques[1]['cout']['bois'] = 180;
$caracteristiques[1]['cout']['pierre'] = 180;
$caracteristiques[1]['cout']['fer'] = 140;
$caracteristiques[1]['points_obtenus'] = 20;

ou bien

$caracteristiques[1]['cout'] = array('population' => 10, 'bois' => 180, 'pierre' => 180, 'fer' => 140);
$caracteristiques[1]['points_obtenus'] = 20;

Eléphanteau du PHP | 38 Messages

23 nov. 2008, 20:57

Vos solutions ont l'air bien plus rapide en effet:)
Mais j'ai souvent du mal à assimilé des "techniques":)
Pouvez vous reprendre mon script, et faire comme vous le faites?

(bien sur pas tous les niveau, juste 2 ou 3).
Ca me permettra de mieux comprendre.


Mais, j'aimerais quand même savoir, comment nommer cette variable?


merci de votre aide.

tghpow

Mammouth du PHP | 1668 Messages

23 nov. 2008, 21:22

Tu as de la chance, je suis de bonne humeur :
<?php
class Batiment
{

   public $cout_de_population;
   public $cout_en_bois;
   public $cout_en_pierre;
   public $cout_en_fer;
   public $points_obtenus;
   public function __construct($niveau)
   {

      if($niveau>30) return false;
      $couts_en_population=array(0 => 10, 1 => 12, 2 => 14, 3 => 16);
      $couts_en_bois=array(0 => 180, 1 => 226, 2 => 286, 3 => 360);
      $couts_en_pierre=array(0 => 160, 1 => 204, 2 => 260, 3 => 332);
      $couts_en_fer=array(0 => 140, 1 => 176, 2 => 222, 3 => 280);
      $points_obtenus=array(0 => 20, 1 => 24, 2 => 28, 3 => 34);
      
      $this->cout_de_population = $couts_en_population[$niveau]; 
      $this->cout_en_bois = $couts_en_bois[$niveau]; 
      $this->cout_en_pierre = $couts_en_pierre[$niveau]; 
      $this->cout_en_fer = $couts_en_fer[$niveau];
      $this->points_obtenus = $points_obtenus[$niveau];

   }
}


?>
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 38 Messages

23 nov. 2008, 21:45

Merci bien!

j'ai juste encore besoin de quelques explications:)

déjà pourquoi appellé la fonction __construct? pourquoi pas construct tout court?

Ensuite dans (0 => 10, o est le niveau et 10 a le cout en population?


Derniere question (la premiere^^), comment nommer la variable? (dans mon script^^).

Merci bien.

tghpow

ViPHP
ViPHP | 4674 Messages

23 nov. 2008, 21:50

Hey :),

La méthode __construct() est une méthode magique de PHP. PHP l'exécute quand la classe est instanciée, juste après en réalité. Pour rappel, on instancie une classe en objet. Peut-être revoir les bases de la programmation orientée objet non :) ?

Ensuite, je ferais une méthode qui comprend tous tes tests, car là, ton objet ne sert à rien du tout à part stocker des valeurs. On aimerait bien qu'il les manipule aussi (pour des raisons de sécurité et de robustesse du code). Tu me suis ou je t'explique un peu plus ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 38 Messages

24 nov. 2008, 20:47

Bonjour et merci de tes explications.
En effet je n'ai pas encore trouvé de bon TP sur la POO digne du siteduzero :)

Mais le fait que l'objet ne contient que des valeurs c'est tout a fait normal:) Je l'ai envisagé ainsi.

Mon probleme principal est celui de nommer la variable:) Malgré toutes vos reponses (que j'apprecie enormement), je n'ai pas eu d'aide vis à vis de cette question.

Je vais donc m'expliquer un peu plus clairement.

Imaginons que je veux faire afficher la valeur du cout_en_or du batiment lorsqu'on son niveau est 3.
Je ferai un truc du genre:
<?php

echo ' le cout en or du batiment au niveau 3 est de: ' . $variable . '';

Mais quel nom donner à cette variable??

ViPHP
ViPHP | 4674 Messages

24 nov. 2008, 20:56

Tu veux parler d'une chose du genre :
var_dump($objet->cout_en_or[3]);
?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 38 Messages

24 nov. 2008, 20:59

Génial! Voilà ce que je voulais depuis le début:)
Merci bien (ainsi qu'aux autres personnes qui m'ont aidés).

Mammouth du PHP | 1668 Messages

24 nov. 2008, 21:03

<?php
$centre_de_commandement = new Batiment (2);

echo ' le cout en population du batiment au niveau 3 est de: ' . $centre_de_commandement->cout_de_population . '';

Voilà, j'ai pas trouver cout_en_or dans la liste, bon, si tu viens de lire le SDZ, ou tu as lût que le SDZ, tu va avoir des problèmes :/ y a un tuto sur la POO en PHP sur le SDZ au passage...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 38 Messages

24 nov. 2008, 21:27

Oui en effet ce n'est pas cout_en_or mais cou_en_bois ou pierre..etc

En effet il y a quelques tutos, mais souvent en PHP4, et malgré les rectifications que l'auteur as fait, j'ai eu un peu de mal a comprendre.
Mais j'essaye de le relire souvent pour mieux le comprendre.



Katagoto, selon ta solution, a chaque fois que je voudrais prendre une valeur je devrais faire:$centre_de_commandement = new Batiment (2);?

merci encore de votre aide

ViPHP
ViPHP | 4674 Messages

24 nov. 2008, 22:40

Ta façon de procéder reste fausse quand même :?. Tu as une utilisation très limitée et maladroite de l'objet. Tu pourrais utiliser des méthodes qui te faciliteraient vraiment le travail … Pourquoi persistes-tu dans cette voix ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 1668 Messages

25 nov. 2008, 13:16

Je suis assez d'accord avec HyWaN, j'ai pas l'impression que tu ais vraiment compris l'intérêt de la POO :/
Sur le SDZ, il y a un tuto mis-à-jour pour PHP5 sur la POO, certes c'est pas le top mais voilà...

Lorsque je fais
$MonObjet = new MaClass($MesVariables);
$MonObjet est une instance de MaClass, le fait de faire ($MesVariables), ça appel son le constructeur (via la méthode magique __construct()) que nous avons définit, $MesVariables étant une liste d'argument pas nécessairement sous forme de variable.
J'ai simplifié là ^^

Lorsque tu fais :
$centre_de_commandement = new Batiment (2);
Tu instancie une class Batiment et tu appel son constructeur avec l'argument 2 (le niveau actuel du bâtiment).

Lorsque tu fais :
$centre_de_commandement->cout_de_population
Tu accède à un attribut (une variable de l'objet), "$cout_en_population", de l'instance "$centre_de_commandement" de ta class "Batiment".

Donc, oui, tu as besoin de l'instancié au moins une fois pour acceder à ses variables...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 4674 Messages

25 nov. 2008, 19:19

Je suis assez d'accord avec HyWaN, j'ai pas l'impression que tu ais vraiment compris l'intérêt de la POO :/
C'est pas ça. Il utilise les classes comme des structures C. Dans un certain sens, ça reste correct mais c'est une sous-utilisation de l'approche objet : on peut faire beaucoup plus de choses. Tu te limites, c'est dommage.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).