JeuWeb - Crée ton jeu par navigateur
Appel du nom d'une fonction via bdd ? - 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 : Appel du nom d'une fonction via bdd ? (/showthread.php?tid=558)

Pages : 1 2


Appel du nom d'une fonction via bdd ? - Slann - 20-12-2006

Bonjour !

J'aimerai savoir si quelqu'un aurait une astuce, pour mon petit soucis :/
Dans le jeu que j'ai en chantier, je souhaites que les personnages puissent sélectionner certaines compétences, chaque compétences décrites par une fonction portant le même nom.

Ainsi j'aimerai savoir comment appeler ces fonctions en récupérant leur nom via la bdd, et si c'est possible :/
A savoir que dans la table compétences, il y aurait un champ : nom_fonc, et qu'en fonction de ce nom récupérer ça exécute dans le code la fonction du même nom :/

Si vous avez besoin de complément sur le concept, n'hésitez pas !


RE: Appel du nom d'une fonction via bdd ? - barst - 20-12-2006

Je te conseille de regarder la doc php sur la fonction eval

http://fr.php.net/eval


RE: Appel du nom d'une fonction via bdd ? - Aramiil - 21-12-2006

Si le nom de ta fonction est stoqué dans la variable $func_name (je te laisse la récuperer par mysql):

Code PHP :
<?php

//Récupération du nom...
$func_name = 'print';
$func_name('Ceci est un test'); //équivalent de print('Ceci est un test');
?>

Pas besoin d'eval ;-) de plus, c'est une fonction lente et souvent dangereuse, donc si tu n'as qu'une seule fonction à executer, mieux vaux faire ça.


RE: Appel du nom d'une fonction via bdd ? - barst - 21-12-2006

je ne savais pas que c'était possible de cette manière


RE: Appel du nom d'une fonction via bdd ? - Slann - 21-12-2006

Merci beaucoup, je ne pensais pas que ce soit possible ainsi, comme quoi Smile


RE: Appel du nom d'une fonction via bdd ? - Aramiil - 21-12-2006

C'est possible et très pratique, notement lorsqu'on créé une classe d'abstraction à plusieurs interface similaires mais utilisant des noms de fonctions différents : tu peux créer une fonction qui récupère grâce à une variable de classe le nom de la fonction à utiliser, et l'executer. Cette même syntaxe fonctionnant d'ailleurs aussi pour les classe:

Code PHP :
<?php

class toto
{
function
bidule()
{
echo
'test';
}
}

$fonction = 'bidule';
$cInstance = new toto();
$cInstance->$fonction(); //équivalent de $cInstance->bidule();

?>

Très très pratique, mais à surveiller de très très près ce qu'on passe en fonction si on ne veux pas que ça devienne problématique ;-)


RE: Appel du nom d'une fonction via bdd ? - Plume - 21-12-2006

Alors là merci beaucoup pour le tuyaux. J'en ai jamais eu besoin sinon je le connaitrais, mais voilà bien un truc que je trouve pratique et simple à mettre en oeuvre.


RE: Appel du nom d'une fonction via bdd ? - joshua - 22-12-2006

L'idée est sympa. D'ailleurs j'avoue que je n'y avais pas pensé! ^^
Juste une peur: est ce que ca ne risque pas dans des codes complexes semer le trouble?


RE: Appel du nom d'une fonction via bdd ? - Aramiil - 22-12-2006

ça dépends de ce que tu as à faire et de comment tu le fais. Oh, d'ailleurs, puisqu'on est sur ce sujet, il y a aussi ça dans le même genre :

Code PHP :
<?php
$toto
= 'Bonjour';
$tata = 'toto';
echo $
$tata; //équivalent de echo $toto; ça affichera Bonjour
?>

Ce genre de syntaxe peut très vite être très lourd, mais ça évite parfois d'imbriquer des if...then...else toutes les deux lignes. à la place, une concaténation de variables et hop ! le tour est joué.


RE: Appel du nom d'une fonction via bdd ? - pascal - 22-12-2006

cette syntaxe sur le nom de fonction / méthode est très utile, surtout si on veut faire du code générique/ utiliser des design pattern.

pour faire une comparaison, c'est un peu comme les pseudo frame:
index.php?page=inscription

on gére de manière générique un ensemble de choses.

pour la sécurité et les problèmes éventuels sur le nom de la fonction, c'est comme pour les pages en pseudo frame: il suffit d'une liste d'éléments autorisés à vérifier avant utilisation ( tableau, switch... )

A+

Pascal