variable globale remise nulle

TAB
Petit nouveau ! | 7 Messages

25 sept. 2009, 04:50

YGloCo.php:
 <?PHP $z ?>
YGloc.php:
<html><head><title>TstGlobal</title></head><body>
<?PHP include 'YGloCo.php'; $z='Hi!'; var_dump($z); echo '$z=',$z ?>
<a href="YGlobc.php"><p>Click</p></a>
</body></html>
YGlobc.php:
<html><head><title>TstGlobal</title></head><body>
<?PHP include'YGloCo.php'; var_dump($z); echo 'Sz=',$z?>
</body></html>
lancer YGloc.php:

string(3) "Hi!" $z=Hi!
Click

cliquer Click, pour lancer YGlobc.php:

NULL Sz=

Pourquoi $z est-il devenu nul?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 sept. 2009, 08:44

Bonjour,
(en général c'est mieux de démarrer un nouveau sujet comme cela)

En PHP, chaque script est indépendant, donc quand tu exécutes YGlobc.php, la variable $z n'est initialisé à aucun moment il est donc normal que tu retrouves NULL.

Par ailleurs, ton script YGloCo.php ne sert strictement à rien.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 369 Messages

25 sept. 2009, 08:48

Salut,
Pourquoi $z est-il devenu nul?
$z n'est pas devenu NULL, il n'existe pas. D'un côté tu restes sur la même page par ton include
(Variable assignée) et de l'autre tu sort de cette page (Donc variable inéxistante).

Si tu forces le parsing de manière strict tu auras confirmation de la chose:
error_reporting(E_ALL | E_STRICT);
> Notice: Undefined variable: z in C:\TON_PATH\TON_FICHIER.php on line xxx

@+ bon code ;)

PS: Scripter en "strict" devrait être une habitude eh eh eh ;)

EDIT: @rthur: Je sais tu m'as grillé... lol

TAB
Petit nouveau ! | 7 Messages

26 sept. 2009, 20:36


En PHP, chaque script est indépendant, donc quand tu exécutes YGlobc.php, la variable $z n'est initialisé à aucun moment il est donc normal que tu retrouves NULL.

Par ailleurs, ton script YGloCo.php ne sert strictement à rien.
Bonjour! Et merci pour la réponse.

J'essayais d'appliquer le conseil donné par Victor BRITO dans
'passer un paramètre à une autre page':
'autre solution plus facile, tu crées un troisième fichier PHP où tu déclares ta variable $GLOBALS, fichier que tu inclus dans tes deux pages (via include () ou require ()).'

YGloCo.php est mon 'troisième fichier', censé établir $z comme variable globale partagée par YGlob et YGlobc. Malheureusement, ce script 'ne sert strictement à rien'.

Comment utiliser les variables globales? Comment donner à $z, dans YGlob, une valeur que YGlobc pourra utiliser? J'ai essayé d'utiliser $GLOBALS['z'], mais sans succès.

Merci!

Eléphant du PHP | 369 Messages

26 sept. 2009, 20:59

Salut,
[...]
Comment donner à $z, dans YGlob, une valeur que YGlobc pourra utiliser?
J'ai essayé d'utiliser $GLOBALS['z'], mais sans succès.
Merci!
Par un envoi via $_GET (http://www.ton_site/index.php?z=123),
Par un $_POST (en utilisant un formulaire)
Ou en utilisant les $_SESSION

@+ bon code ;)

PS: En utilisant un fichier (mais... je doute que ca te soit utile)

Mammouth du PHP | 985 Messages

26 sept. 2009, 21:03

C'est déconseillé d'utiliser des variables globales.
- Pour des raisons de sécurité.
- Mais surtout, à mon avis, pour des raisons de performances puis aussi pour éviter des possibles bugs...

Il est bien mieux, toujours à mon avis, d'utiliser de simples variables définies dans un fichier que l'on appelle grâce à la fonction include() ou require()...

Comment?
Exemple:
<php
$z = 'toto';
?>
Ensuite il suffit d'inclure ce fichier seulement dans les fichiers qui ont besoin de cette variable...

[EDIT]
Sinon, tout dépend de ton besoin... Donc suivant les situations: Utiliser les solutions citées par FuZZyLine plus haut...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

TAB
Petit nouveau ! | 7 Messages

03 oct. 2009, 05:54

quand tu exécutes YGlobc.php, la variable $z n'est initialisée à aucun moment [..]
N'est-elle pas (variable globale) initialisée to 'Hi!' par YGloc, avant qu'il lance YGlobc?