On OO, tu auras bien plus de facilité pour gérer tout cela...
[exemple en rédaction...]
building_interface est l'interface commune à tous les batiments, et indique qu'un objet est un batiment
building_types centralise les types possibles des batiments. L'intérêt évident est de ne plus répéter la chaine de caractères (ex: 'habitation'), et tout répétition est une invitation à la fuate de farppe
building_type_* est l'interface indiquant qu'un bâtiment est un type donné.
class * sont les batiments. On pourra leur trouver des noms de classe plus ciblés, ou bien (et c'est ce que je ferait), les mettre dans un namespace bien à eux.
Je trouve un tel code bien plus lisible, séparant clairement la création du tableau de données (avec les "new") de la définition de chaque building (aka chaque classe).
De plus, le traitement de $BUILDINGS sera facilité: on pourra ajouter des méthodes aux classes si on veut faire faire quelque chose à ces bâtiments.
Par exemple, on pourra passer par une classe abstraite "abstract class building_abstract" qui centraliserait les méthodes communes aux classes déclarées ici. Ensuite, on leur fait hériter de cette classe abstraite via class * extends building_abstract implements building_interface, building_type_*.
Notes: le var_dump() affiche un "tableau" de un élément, qui au nom_variable du batiment associe l'objet correspondant à ce batiment, j'ai trouvé cela assez joli comme rendu
En pratique, je ferai de $BUILDINGS un objet (un conteneur de building_interface), mais bon, je n'ai pas envie d'écrire tout le code ^^
[exemple en rédaction...]
<?php
/**
* Un batiment stocké dans PHP au lieu de la BDD
*/
interface building_interface
{
}
/**
* Interfaces définissant le type d'un batiment.
*/
interface building_types
{
const Habitation = 'habitation';
const Distribution = 'distribution';
const Hygiene = 'hygiene';
const Securite = 'securite';
const Stockage = 'stockage';
const Ressources = 'ressources';
const Industrie = 'industrie';
}
interface building_type_distribution
{
const type = building_types:istribution;
}
interface building_type_habitation
{
const type = building_types::Habitation;
}
interface building_type_hygiene
{
const type = building_types::Hygiene;
}
interface building_type_industrie
{
const type = building_types::Industrie;
}
interface building_type_ressources
{
const type = building_types::Ressources;
}
interface building_type_securite
{
const type = building_types::Securite;
}
interface building_type_stockage
{
const type = building_types::Stockage;
}
/**
* Les buildings
*/
class place_du_marche implements building_interface, building_type_distribution
{
const id = 9;
const nom = 'place du marché';
const nom_pluriel = '';
const nom_variable = 'place_du_marche';
}
class masure implements building_interface, building_type_habitation
{
const id = 7;
const nom = 'masure';
const nom_pluriel = '';
const nom_variable = 'masure';
}
class batisse implements building_interface, building_type_habitation
{
const id = 8;
const nom = 'bâtisse';
const nom_pluriel = '';
const nom_variable = 'batisse';
}
class domaine implements building_interface, building_type_habitation
{
const id = 21;
const nom = 'domaine';
const nom_pluriel = '';
const nom_variable = 'domaine';
}
class appartement implements building_interface, building_type_habitation
{
const id = 22;
const nom = 'appartement';
const nom_pluriel = '';
const nom_variable = 'appartement';
}
class residence implements building_interface, building_type_habitation
{
const id = 23;
const nom = 'résidence';
const nom_pluriel = '';
const nom_variable = 'residence';
}
class hopital implements building_interface, building_type_hygiene
{
const id = 1;
const nom = 'hôpital';
const nom_pluriel = '';
const nom_variable = 'hopital';
}
class fontaine implements building_interface, building_type_hygiene
{
const id = 2;
const nom = 'fontaine';
const nom_pluriel = '';
const nom_variable = 'fontaine';
}
class morgue implements building_interface, building_type_hygiene
{
const id = 5;
const nom = 'morgue';
const nom_pluriel = '';
const nom_variable = 'morgue';
}
class dentiste implements building_interface, building_type_hygiene
{
const id = 6;
const nom = 'dentiste';
const nom_pluriel = '';
const nom_variable = 'dentiste';
}
class fonderie implements building_interface, building_type_industrie
{
const id = 12;
const nom = 'fonderie';
const nom_pluriel = '';
const nom_variable = 'fonderie';
}
class scierie implements building_interface, building_type_industrie
{
const id = 13;
const nom = 'scierie';
const nom_pluriel = '';
const nom_variable = 'scierie';
}
class pressoir implements building_interface, building_type_industrie
{
const id = 17;
const nom = 'pressoir';
const nom_pluriel = '';
const nom_variable = 'pressoir';
}
class armurerie implements building_interface, building_type_industrie
{
const id = 18;
const nom = 'armurerie';
const nom_pluriel = '';
const nom_variable = 'armurerie';
}
class moulin implements building_interface, building_type_industrie
{
const id = 19;
const nom = 'moulin';
const nom_pluriel = '';
const nom_variable = 'moulin';
}
class boulangerie implements building_interface, building_type_industrie
{
const id = 20;
const nom = 'boulangerie';
const nom_pluriel = '';
const nom_variable = 'boulangerie';
}
class brasserie implements building_interface, building_type_industrie
{
const id = 24;
const nom = 'brasserie';
const nom_pluriel = '';
const nom_variable = 'brasserie';
}
class mine_de_fer implements building_interface, building_type_ressources
{
const id = 14;
const nom = 'mine de fer';
const nom_pluriel = '';
const nom_variable = 'mine_de_fer';
}
class verger implements building_interface, building_type_ressources
{
const id = 15;
const nom = 'verger';
const nom_pluriel = '';
const nom_variable = 'verger';
}
class mine_d_or implements building_interface, building_type_ressources
{
const id = 16;
const nom = "mine d'or"; // l'apostrophe panique la coloration syntaxique de JeuWeb...
const nom_pluriel = '';
const nom_variable = 'mine_d_or';
}
class exploitation_forestiere implements building_interface, building_type_ressources
{
const id = 25;
const nom = 'exploitation forestière';
const nom_pluriel = '';
const nom_variable = 'exploitation_forestiere';
}
class poste_de_garde implements building_interface, building_type_securite
{
const id = 26;
const nom = 'palais de justice';
const nom_pluriel = '';
const nom_variable = 'poste_de_garde';
}
class grenier implements building_interface, building_type_stockage
{
const id = 3;
const nom = 'grenier';
const nom_pluriel = '';
const nom_variable = 'grenier';
}
class entrepot implements building_interface, building_type_stockage
{
const id = 4;
const nom = 'entrepôt';
const nom_pluriel = '';
const nom_variable = 'entrepot';
}
$BUILDINGS = array (
new place_du_marche(),
new masure(),
new batisse(),
new domaine(),
new appartement(),
new residence(),
new hopital(),
new fontaine(),
new morgue(),
new dentiste(),
new fonderie(),
new scierie(),
new pressoir(),
new armurerie(),
new moulin(),
new boulangerie(),
new brasserie(),
new mine_de_fer(),
new verger(),
new mine_d_or(),
new exploitation_forestiere(),
new poste_de_garde(),
new grenier(),
new entrepot()
);
foreach ($BUILDINGS as $building)
if ($building::type == building_types::Habitation)
var_dump(array($building::nom_variable => $building));
?>
building_interface est l'interface commune à tous les batiments, et indique qu'un objet est un batiment
building_types centralise les types possibles des batiments. L'intérêt évident est de ne plus répéter la chaine de caractères (ex: 'habitation'), et tout répétition est une invitation à la fuate de farppe
building_type_* est l'interface indiquant qu'un bâtiment est un type donné.
class * sont les batiments. On pourra leur trouver des noms de classe plus ciblés, ou bien (et c'est ce que je ferait), les mettre dans un namespace bien à eux.
Je trouve un tel code bien plus lisible, séparant clairement la création du tableau de données (avec les "new") de la définition de chaque building (aka chaque classe).
De plus, le traitement de $BUILDINGS sera facilité: on pourra ajouter des méthodes aux classes si on veut faire faire quelque chose à ces bâtiments.
Par exemple, on pourra passer par une classe abstraite "abstract class building_abstract" qui centraliserait les méthodes communes aux classes déclarées ici. Ensuite, on leur fait hériter de cette classe abstraite via class * extends building_abstract implements building_interface, building_type_*.
Notes: le var_dump() affiche un "tableau" de un élément, qui au nom_variable du batiment associe l'objet correspondant à ce batiment, j'ai trouvé cela assez joli comme rendu
En pratique, je ferai de $BUILDINGS un objet (un conteneur de building_interface), mais bon, je n'ai pas envie d'écrire tout le code ^^