OVH Cloud OVH Cloud

Visibilite de variables

13 réponses
Avatar
Chewee
Bonjour tout le monde.
J'ai un petit souci concernant les visibilités des variables.

J'ai un fichier enum.php qui contient des définitions de variable globales
uniquement (ex : $toto = 0; etc...)
J'ai un fichier bidule.php qui contient une definition d'une fonction f
utilisant $toto.

Dans mon main, j'ai :

include(enum.php);
include(bidule.php)

f();

Hors, à l'éxécution, f ne connait pas la variable $toto.
J'ai lu pourtant qu'une variable globale était visible de partout, dans tous
les blocs et fonctions.

Alors? Est est mon erreur?

Merci d'avance.

10 réponses

1 2
Avatar
Moiron Denis
On 10 Jul 2004 09:24:44 GMT
Chewee wrote:

[...]
J'ai un fichier enum.php qui contient des définitions de variable
globales uniquement (ex : $toto = 0; etc...)
J'ai un fichier bidule.php qui contient une definition d'une fonction
f utilisant $toto.

Dans mon main, j'ai :

include(enum.php);
include(bidule.php)

f();

Hors, à l'éxécution, f ne connait pas la variable $toto.
J'ai lu pourtant qu'une variable globale était visible de partout,
dans tous les blocs et fonctions.


Pour que ta variable $toto soit manipulée par la fonction f de façon
globale, il faut la déclarer en tant que tel dans ta fonction f() :

function f(){
global $toto; // Ajoute cette ligne à ta fonction.
...
} // f

Que la fonction f soit dans enum ou dans bidule, cette déclaration est
nécessaire pour lui dire : tu manipules une variable globale.

Denis

Avatar
Olivier Miakinen

Dans mon main, j'ai :

include(enum.php);
include(bidule.php)


Je suppose que dans ton code tu n'as pas oublié les guillemets (simples
ou doubles) et la virgule.

[Or], à l'éxécution, f ne connait pas la variable $toto.
J'ai lu pourtant qu'une variable globale était visible de partout, dans tous
les blocs et fonctions.


Non, c'est faux :
http://fr.php.net/manual/fr/print/language.variables.scope.php

Peut-être confondais-tu avec les variables super globales (même page) ?

Avatar
Chewee
Olivier Miakinen wrote:

Dans mon main, j'ai :

include(enum.php);
include(bidule.php)


Je suppose que dans ton code tu n'as pas oublié les guillemets
(simples
ou doubles) et la virgule.


Oui, bien entendu, il manque ls guillements :-)


[Or], à l'éxécution, f ne connait pas la variable $toto.
J'ai lu pourtant qu'une variable globale était visible de partout,
dans tous les blocs et fonctions.


Non, c'est faux :
http://fr.php.net/manual/fr/print/language.variables.scope.php

Peut-être confondais-tu avec les variables super globales (même page)
?


Merci, j'ai eu la réponse à mes interrogations.
Je l'ai dis dans un message mais il tarde à être publié...


Avatar
Anthony Desvernois
"Chewee" a écrit dans le message de
news:40ef2da4$0$24437$
Bonjour tout le monde.
J'ai un petit souci concernant les visibilités des variables.

J'ai un fichier enum.php qui contient des définitions de variable globales
uniquement (ex : $toto = 0; etc...)
J'ai un fichier bidule.php qui contient une definition d'une fonction f
utilisant $toto.

Dans mon main, j'ai :

include(enum.php);
include(bidule.php)

f();


pourquoi pas
include(enum.php);
include(bidule.php)
f($toto);



Hors, à l'éxécution, f ne connait pas la variable $toto.
J'ai lu pourtant qu'une variable globale était visible de partout, dans
tous

les blocs et fonctions.

Alors? Est est mon erreur?

Merci d'avance.
derien

bonne soirée @+++


--
-------------------------------
Anthony / Webhellfire
http://aplan.france.free.fr/index.php?fr=4

Avatar
Chewee
Anthony Desvernois wrote:
"Chewee" a écrit dans le message de
news:40ef2da4$0$24437$
Bonjour tout le monde.
J'ai un petit souci concernant les visibilités des variables.

J'ai un fichier enum.php qui contient des définitions de variable
globales uniquement (ex : $toto = 0; etc...)
J'ai un fichier bidule.php qui contient une definition d'une
fonction f utilisant $toto.

Dans mon main, j'ai :

include(enum.php);
include(bidule.php)

f();


pourquoi pas
include(enum.php);
include(bidule.php)
f($toto);



Tout simplement parce que j'ai une bonne vingtaine de variables globales
qu'il faudrait passer en paramêtre de ma fonction...
Merci quand même.


Avatar
Anthony Desvernois
"Chewee" a écrit dans le message de
news:40f3c432$0$16438$
Anthony Desvernois wrote:
"Chewee" a écrit dans le message de
news:40ef2da4$0$24437$
Bonjour tout le monde.
J'ai un petit souci concernant les visibilités des variables.

J'ai un fichier enum.php qui contient des définitions de variable
globales uniquement (ex : $toto = 0; etc...)
J'ai un fichier bidule.php qui contient une definition d'une
fonction f utilisant $toto.

Dans mon main, j'ai :

include(enum.php);
include(bidule.php)

f();


pourquoi pas
include(enum.php);
include(bidule.php)
f($toto);



Tout simplement parce que j'ai une bonne vingtaine de variables globales
qu'il faudrait passer en paramêtre de ma fonction...
Merci quand même.


ben la syntaxe serait assez lourde ; f(..,..,.. *20);
mais tu seras sur que ca marche :)
bonne fin d'aprem et bonne chance :)
+++

--
-------------------------------
Anthony / Webhellfire
http://aplan.france.free.fr/index.php?fr=4



Avatar
Chewee
"Anthony Desvernois" a écrit dans le message de news:
40f3ec39$0$24438$

ben la syntaxe serait assez lourde ; f(..,..,.. *20);
mais tu seras sur que ca marche :)
bonne fin d'aprem et bonne chance :)
+++


Programmation super lourde...
Mais en utilisant des variables globales, je suis sur que ça marche, pas de
soucis ;)
J'ai dis 20 mais en fait j'en ai une centaine et surtout, le jour ou j'en
ajoute une, je ne veux pas avoir à modifier ma fonction et tous les endroit
ou elle est appellée.

Avatar
John Gallet
Programmation super lourde...
Non, propre.


Mais en utilisant des variables globales, je suis sur que ça marche, pas de
soucis ;)


Non, tu es sûr que tes variables sont visibles partout, pas que ça
marche.

J'ai dis 20 mais en fait j'en ai une centaine et surtout, le jour ou j'en
ajoute une, je ne veux pas avoir à modifier ma fonction et tous les endroit
ou elle est appellée.


Fais donc un seul fichier, ce sera encore moins lourd. Et puis ce sra
encore plus facile de s'y retrouver.

Y'a pas besoin de générer des images alétoires pour se dire qu'il vaut
mieux lire ça que d'être aveugle.

a++
JG

--
Ch. in fclphp : "Grouik power vaincra"

Avatar
Chewee
"John Gallet" a écrit dans le message de news:

Programmation super lourde...
Non, propre.




Tu trouves propre de faire une fonction avec 20 paramêtre?
On n'a pas la même notion du propre on dirait.

Mais en utilisant des variables globales, je suis sur que ça marche, pas
de


soucis ;)


Non, tu es sûr que tes variables sont visibles partout, pas que ça
marche.



Tu as vu mon code?
Ces fameuse variables visibles de partout sont des constantes...
Merci de votre sollicitude, je sais ce que je fais.

J'ai dis 20 mais en fait j'en ai une centaine et surtout, le jour ou
j'en


ajoute une, je ne veux pas avoir à modifier ma fonction et tous les
endroit


ou elle est appellée.


Fais donc un seul fichier, ce sera encore moins lourd. Et puis ce sra
encore plus facile de s'y retrouver.


Tu peux m'apprendre à programmer aussi si tu veux.
C'est sympa de m'aider mais ne me fais pas la morale sur mon code, tu ne
sais même pas de quoi il est fait.


Y'a pas besoin de générer des images alétoires pour se dire qu'il vaut
mieux lire ça que d'être aveugle.



Tu mélanges deux threads là...

a++
JG

--
Ch. in fclphp : "Grouik power vaincra"



Avatar
John Gallet
Tu trouves propre de faire une fonction avec 20 paramêtre?


Plus propre que d'avoir 20 globales modifiables n'importe où dans ladite
fonction sans que l'appelant comprenne ce qui se passe, qui est la porte
ouverte à n'importe quoi. Et accessoirement les tableaux ne sont pas faits
pour les clébards.

On n'a pas la même notion du propre on dirait.
En effet.


Tu as vu mon code?


Selon ce que tu écrit là, je préfère pas.

Ces fameuse variables visibles de partout sont des constantes...


Et en plus il connait même pas la différence entre une variable et une
constante. Eh ! REVEIL ! La fonction define() elle sert à quoi ??

Merci de votre sollicitude, je sais ce que je fais.


Vu ce qui est écrit juste au dessus, j'ai comme un gros doute. Mais du
moment que j'ai pas à maintenir ce code, après tout, c'est pas mon problème.

Tu peux m'apprendre à programmer aussi si tu veux.


Visiblement, les habitudes prises seraient trop longues à amputer, les
causes perdues, ça m'intéresse pas.

C'est sympa de m'aider mais ne me fais pas la morale sur mon code, tu ne
sais même pas de quoi il est fait.



Selon tes propres écrits : tu ne vois rien de choquant à avoir 20 variables
globales dans une fonction. Rien que ça, c'est bon, rideau. Si ce sont des
constantes, utilise define(), si ce sont des variables de configuration
venant d'un fichier de config, tu pourrais au moins avoir la décence de les
mettre dans un seul tableau afin que tout soit au même endroit et quand en
plein milieu du code on voit if($cfg['toto']) on comprenne totu de suite que
ça vient du fichier de config.

Enfin bon, moi ce que j'en dis, hein.
JG

1 2