12-07-2010, 10:03 PM
Hello, j'ai modifié ton message pour reformatter ton objet JSON (sinon ça défigurait totalement le forum) à l'aide de Javascript Beautifier.
Sephi-Chan
13-07-2010, 12:15 AM
Je vois pas trop l'utilité de ton système...
Salut Oxman :-) L'utilité ressort uniquement (surtout) sur des jeux ou il y a des quantités importantes de données brutes. Comme avec les modèles BDD, il y a des méthodes qui travaillent sur ces données dont tu as besoin de façon répétitive sur plusieurs pages. Avec ce "système", tu as tout ce dont tu as besoin: Un singleton (j'imagine que ta connexion BDD est également un singleton...), et des méthodes séparés pour chaque fichier (tables...), le tout en faisant uniquement un extend d'une classe mère qui suit des directives solides en étant abstrait et avec les "finals". Avant PHP 5.3 tu aurait du définir dans chaque classe fille un propre singleton (duplication de code, bwerk). Avec ce system (le late static binding), tu peux étendre les singletons, ce qui n'était pas "vraiment" possible avant. Après c'est sur que si toi tu n'as jamais eu le besoin d'avoir des méthodes précise qui travaillent sur tes données brutes de config, ce system est complétement inutile. Je vais te donner un autre exemple tout simple pour te montrer l'utilité dans mon cas. Je mets la source PHP et non JSON (plus lisible) Code PHP :
Comme tu le vois, si je récupère mon fichier json, j'ai un array à 2 dimensions. 60 fois (je dis au bol) dans les codes de mon jeu j'ai besoin de cette array tel quel, et 60 fois je veux uniquement la 2ème dimension (je veux donc un array avec uniquement les ressources même, sans les catégories). ça ne serait pas très pro de faire 60 fois une magouille qui me renvoie mon tableau comme souhaité... C'est la que j'ai besoin d'une fonction qui le fait. Et comme je ne veux pas mettre mes fonctions n'importe ou (et que si en plus je peux hériter de pleins de bonne choses) j'ai donc créer ce systeme. De plus, le jour ou tu décide de ne plus utiliser JSON, mais autre chose (XML ou je ne sais quoi), tu change uniquement Gamgeconfig.php sans te soucier de tout le reste... ton application vas fonctionner pareillement! Ou encore, tu utilise plusieurs formats... Il suffit de créer des lecteurs dans la classe Gameconfig.php, tout le reste n'est pas touché! Voilà en gros En me relisant je ne suis pas vraiment sur d'avoir été beaucoup plus clair... Bonne chance pour me déchiffrer ^^
26-07-2010, 04:54 PM
YOp,
sympa comme démo, perso je pourrais pas trop l'utiliser tel quel ( php 5.2 ) ( A moins d'avoir une classe mère singleton avec appel comme ceci : Config::getInstance('buildings') ) ( pis bon j'aime pas les singleton :p ) J'ai déjà utilisé du Json pour voir, mais je me demande ce qui est le plus rapide, parser du JSON ou parser un recordset de mySQL ?
Pour parler un peu des Singleton, plus je potasse Scala plus je me rends contre que c'est le langage Script le plus souple/puissant que je n'ai jamais vu, une classe s'écrit ainsi : Code PHP :
Un singleton ainsi : Code PHP :
Première remarque, au lieu d'écrire : Code PHP :
J'aurais pu écrire : Code PHP :
Mais Scala viste à éliminer tous le superflus inutile qui alourdis la lecture. De plus, Scala suit le principe "Uniform Access Principle", tout étant objet on doit pouvoir accéder à tous les objets de la même façon, sans savoir si c'est une méthode, une classe, une variable, d'où l'aspect facultatif du . et des () lorsque l'on a qu'un argument ou pas d'argument. Concernant donc l'exemple plus haut, pour transformer une classe en singleton il suffit de remplacer le mot clé "class" par "object", un objet étant de part sa nature unique, la classe devient automatiquement un singleton, simple et sexy Autre remarque, j'ai écris : Code PHP :
Code PHP :
Première chose : Pourquoi = { } au lieu de { } comme dans les autres langages ? En PHP ça sera : Code PHP :
Code PHP :
En Scala si on utilise {} et non = {} pour lui il a affaire à une procédure et non une fonction, elle ne peut donc retourner que le type Void (null, ce type à pour nom Unit en Scala) Si on utilise = {} ça signifie que l'on va avoir une fonction qui va retourner une valeur. Ceci était le premier point. Deuxième point : Code PHP :
Code PHP :
Il faut privilégié la première écriture autant que faire se peut pour laisser le moteur de Scala inférer le type de la donnée retournée. Donc en gros, il va automatiquement déduire le bon type de la donnée retournée à la compilation et le mettre lui même. Il y a beaucoup beaucoup d'endroit en Scala ou l'inférence est automatique, le compilateur devine tout seul les types de variable, ça permet d'avoir un typage fort sans une certaine lourdeur d'écriture. Troisième point, return est facultatif et on ne doit pas l'utiliser de manière générale, si on l'utilise on est obligé de préciser le type de variable que va retourner la fonction car le moteur d'inférence n'y arrive pas sinon. Et comme on l'a vu plus haut, il est recommandé de laisser le moteur d'inférence faire son travail. Lorsque l'on utilise = { } dans une fonction (qui va donc retourner une donnée) la dernière donnée sera automatiquement retournée (comme en Ruby) Quatrième et dernier point, l'utilisation des { } est totalement facultatif dans tous les cas, elle n'est utile que si on a pusieurs instructions à mettre dans le corps (le { } sert à définir des corps/body/block pour tout un tas de cas) sinon il suffit simplement d'écrire l'instruction C'est pourquoi j'ai écris : Code PHP :
Code PHP :
En gros grace à Scala on passe de ce type d'écriture : Code PHP :
Code PHP :
Ce qui bien entendu allège grandement l'écriture et rend les choses pus lisible
27-07-2010, 01:04 PM
mais un objet, au lieu d'une classe, peux tu l'instancier ? peux tu lui passer des paramètres en constructeur ? pour ensuite utiliser un mot clé de type 'this' ?
27-07-2010, 01:21 PM
Ca dépend exactement ce que tu veux faire en fait, un objet c'est un objet, donc tu ne l'instancies pas.
Mais par contre quand tu vois que j'utilise la variable "id" dans mon objet, c'est en fait "this.id"
27-07-2010, 01:23 PM
ça ce serait valide ?
Code : object MaClasseSingleton {
27-07-2010, 01:30 PM
Je suis en train de voir pour te pondre un exemple par rapport à ce que tu veux, en fait il faut passer par le pattern Factory et je regarde comment le faire le plus proprement possible
|
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
sauvergarde fichiers de config serveur (debian) | php_addict | 0 | 1 933 |
28-06-2011, 07:22 PM Dernier message: php_addict |
|
[Abstraction de BD] dbFacile | Rodrik | 3 | 2 992 |
23-09-2009, 11:21 PM Dernier message: zeppelin |
|
cherche aide pour certains points config serveur | X-ZoD | 0 | 2 173 |
20-10-2006, 09:47 AM Dernier message: X-ZoD |