Utiliser une même variable dans différentes fonctions.

VaN
Mammouth du PHP | 1107 Messages

22 janv. 2008, 18:37

Bonjour,

Ce n'est pas vraiment un problème qui me fait poster ici, mais plutot une envie de savoir si je peux améliorer mon script.

J'ai un fichiers nommé vars.php, contenant quelques variables, que j'utilise dans plusieurs de mes pages, comme par exemple $admin_mail, $root_site, $site_name, et surtout $prefixe, qui est le string que je place devant chacune de mes tables (car sur mon serveur de test distant, je ne peux avoir qu'une seule base de données, qui me sert pour plusieurs projets à la fois).

Et j'ai également un fichier functions.php, dans lequel je place toutes mes fonctions. Hors, il se trouve que dans quelques unes de ses fonctions, je fais des requetes SQL, qui utilise la variable $prefixe, contenu dans le fichier vars.php. Et pour que la fonction connaisse cette variable, je dois faire un
require 'vars.php'
au début de chacune de mes fonctions utilisant cette variable. Donc j'aimerai savoir si il existe un moyen de ne plus faire ce require() au debut de chacune de mes fonctions, mais par exemple de faire un require global, au tout début de mon fichier functions.php, quelque chose qui me permettrai de le déclarer une seule fois pour toute.

ViPHP
ViPHP | 4039 Messages

22 janv. 2008, 19:14

eum, et un simple
global $prefix;
ne serait pas suffisant ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 259 Messages

22 janv. 2008, 19:26

hello,

lorsque plusieurs fonctions travaillent sur les memes variables, tu peux te tourner vers la programmation objet, c'est pas mal...

sinon tu as aussi la possibilité de rendre une variable globale à ton script avec le tableau $GLOBALS, c'est pas mal aussi.

sinon la méthode de Berzemus :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 janv. 2008, 20:45

Et pourquoi ne pas le passer en paramètres à tes fonctions ?

vars.php
$prefix = "monprfix_";
functions.php
function mafonction($connexion, $prefix)
{
  echo "mon prefix est : ". $prefix;
}
et ce sont donc tes scripts d'exécution qui font le lien entre les 2
require_once('vars.php');
require_once('functions.php');

mafonction($prefix)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 291 Messages

22 janv. 2008, 20:50

Sauf que ça te fait faire une copie locale à chaque fois :(
Sinon, pour le prefixe, tu peux utiliser une constante...
<?php
// Quelque part, dans un fichier inclus... trèees inclu....
define('PREFIX', "myprefix");


// Pendant ce temps la, dans monAutreFichier.php
$query = 'SELECT * FROM '.PREFIX.'_table';
?>
Fonctionne sans specifier de directive 'global', ou sans passer quoi que ce soit en paramètre. Bref, une constante !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 janv. 2008, 22:10

Effectivement, je suis désolé, j'ai lu en travers la dernière phrase du post d'origine.

En plus des solutions précédentes, tu pourrais inclure le fichier vars.php dans le fichier functions.php en utilisant un include de cette sorte
require_once( dirname(__FILE__) .'vars.php' )
Précisions :
__FILE__ contient le chemin absolu du script dans lequel se trouve cette instruction
dirname() retourne le dossier du chemin passé en parametre. si __FILE__ retourne "/home/www/libs/functions.php", dirname(__FILE__) va retourner "/home/www/libs/"
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer