PHP accéder à des variables globales en fonction
Selon la plupart des langages de programmation champ d'application des règles, je peux accéder aux variables définies à l'extérieur de fonctions à l'intérieur d'eux, mais pourquoi ce code ne fonctionne pas?
<?php
$data = 'My data';
function menugen(){
echo "[".$data."]";
}
menugen();
?>
Il est []
en sortie.
- Ne pas le traiter comme global, le passer à la fonction comme argument
- D'où vient le manuel de dire de telles choses?
- Liées à la lecture: PHP mondial dans les fonctions
- Qui downvoted cela? C'est un bien formé question ...
- Vérifiez le deuxième exemple de cette page : php.net/manual/en/language.variables.scope.php
- Les Questions ne doivent pas seulement être bien formés, ils doivent également se conformer à la DTD. Bazinga, XML blague.
- lol +1 pour le Bazinga:)
- autant que je sache, nous pouvons accéder à l'aide de $GLOBALS['varname'] où l'indice "varname" est $varname, en dehors de la fonction.En effet, nous pouvons utiliser print_r($GLOBALS) pour afficher toutes les variables globales.
- Pas toujours la meilleure approche. Envisager un script simple avec un peu lâche des fonctions et des variables partagées à l'extérieur. Changer la façon dont vos fonctions de travail ou de tout mettre dans les classes et à l'aide de
$this->foo
peut-être exagéré.
Vous devez vous connecter pour publier un commentaire.
Il n'est pas de travail parce que vous ont déclarer les variables globales, vous aurez accès:
sinon, vous pouvez y accéder en tant que
$GLOBALS['data']
, voir http://php.net/manual/en/language.variables.scope.phpMême si un peu OT, je vous suggère de vous éviter d'utiliser des variables globales à tous et préfèrent passant comme paramètres.
This script will not produce any output because the echo statement refers to a local version of the $a variable, and it has not been assigned a value within this scope.
Vous pouvez effectuer l'une des opérations suivantes:
Ou
Cela étant dit, l'abus de variables globales peut conduire à des mauvais code. Il est généralement préférable de réussir dans ce que vous avez besoin. Par exemple, au lieu de faire référence à une base de données mondiale de l'objet que vous devriez passer à une poignée de la base de données et de la loi sur que. Cela s'appelle de l'Injection de Dépendances. Il rend votre vie beaucoup plus facile lorsque vous mettez en place des tests automatisés (qui doit).
C'est une question de portée. En bref, les variables Globales doit être évité AFIN de:
Vous devez soit passer comme paramètre:
OU dans une classe et accéder
Edit: Voir @MatteoTassinari réponse ainsi que vous pouvez le marquer comme global pour y accéder, mais les variables globales sont généralement pas nécessaires de sorte qu'il serait judicieux de repenser votre codage.
menugen()
cela implique qu'il va y avoir plus de choses que le simple fait de produire un menu. Par exemple, ce sujet de la prorogation de ce menu pour ajouter plus d'éléments à partir d'une autre source, que sur la sélection de la page actuellement sélectionnée dans le menu. Ayant aléatoire global de vars et de la logique de tous sur la place des cris pour la programmation orientée objet design. Le fait que PHP / JS n'a pas besoin d'être structuré est l'une des plus grandes raisons que vous trouverez beaucoup de désordre maladroit code. Il peut être très bien fait, mais permet aux gens d'avoir aucune réflexion sur la maintenabilité d'aller de l'avant.Une autre façon de faire:
Vous avez besoin pour passer la variable dans la fonction:
Si vous le souhaitez, vous pouvez utiliser le bouton "définir" une fonction, mais cette fonction créer une des constantes qui ne peut pas être changé une fois défini.
http://www.w3schools.com/php/php_constants.asp