Variable GLOBALE

Eléphanteau du PHP | 16 Messages

11 juin 2014, 08:41

Bonjour,

y'a t il un 'danger' à utiliser une ou des variables GLOBALES ($GOLBALS['non_variable']) dans une fonction ?

Ce qui m'intéresse en l'espèce c'est qu'en utilisant cette forme d'appel de donnée je ne suis pas obligé de passer l'id du membre (qui a été enregistré ds une variable de session à la connexion du membre au site) comme paramètre dans une fonction.

Merci.

Eléphanteau du PHP | 16 Messages

11 juin 2014, 08:55

wouhaouuu
j'ai fait un :
echo "<pre>";
print_r($GLOBALS);
echo "</pre>";

fiou, c'est impressionnant tout ce qui sort..... c'en est même effrayant... toutes les données 'secrètes' sont accessibles alors ??...

Mais cela veut il dire que si une variable '$variable' a été créée quelque part elle est automatiquement accessible n'importe où sous $GLOBALS['variable'] ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 juin 2014, 15:07

salut,

pour répondre as ta question :
le danger c'est de ne pas maîtriser l'origine de la variable et qu'il y des utilisations ou modifications non souhaité. De plus tu peu facilement perdre l'origine de l'info.

Généralement c'est une mauvaise idée, simple pour permettre d'isoler le code et de la rendre testable (voir phpunit).

ce n'est pas gênant d'avoir un truc du genre
<?php
function getUserByd($id) {}
par contre
<?php
function getUserByd() {
$sql = 'select bla, bla from usertable where id='.$_SESSION['userid'];
// etc
}
implique que cette méthode ne pourra être réutiliser et qu'il y ai bien un $_SESSION['urserid'].
Je pense aussi que tu va faire pareil pour la mise à jour ? et tu va dupliquer $_SESSION['urserid'].
si tu te dit userid c'est pas top tu fait comment pour être certain de modifier tous le monde ?

ensuite avoir une fonction générique va te permettre d'éviter de dupliquer le code quand tu va vouloir permettre d'afficher le profil utilisateur (getUserByid() ne pourras pas t'aider).
si tu veux modifier un tuilisateur tu passe un objet user à ta fonction et c'est réglé, que ce soit celui qui et logé ou un autre tu peux le faire.

Tu y a gagnera en maintenance et au final en efficacité.

si tu te penche sur le modèle d'une application, regarde du coté de la poo (programmation orienté objet) tu y trouvera pas mal de chose associé, comme la modélisation (uml, merise, etc) qui pourront répondre aussi à tes questions.

Pour ce qui est de l’utilisation de $_GLOBALS le mieux reste encore la doc ;) http://fr2.php.net/manual/fr/reserved.v ... lobals.php

@+
Il en faut peu pour être heureux ......