2010-04-08 6 views
1

Je suis curieux de savoir pourquoi le code suivant se comporte différemment?Pourquoi est-ce que je ne peux pas référencer une variable globale directement en PHP?

Ce qui suit ne fonctionne pas:

$_variable &= global $_global; 
echo $_variable; 

Les travaux suivants:

global $global; 
$_variable &= $_global; 
echo $_variable; 

?

+0

@Pekka: Bonne réponse, mais pourquoi devons-nous utiliser 'global' de toute façon? Je connais beaucoup de langues pour lesquelles vous n'avez pas besoin de spécifier dans une fonction qu'une variable (globale) de l'extérieur de cette fonction est nécessaire. –

+0

@Marcel Comme PHP est dynamiquement typé, avec les variables créées à la volée, il n'y a pas de déclaration spécifique. Les langues fortement typées (ou même celles qui vous obligent à déclarer la variable) déclarent la variable dans une instance, dans une portée, et celle-ci est utilisée tant qu'elle est dans la portée, et n'a pas été surchargée avec une version plus récente du même nom. Comme il n'y a pas de déclaration formelle, PHP suppose que vous êtes toujours en train de déclarer la portée locale, ce qui vous permet de réutiliser les noms de variables. – Tarka

+0

Je sais qu'en règle générale on est découragé d'utiliser des variables globales, mais parfois on est obligé de le faire (je programme Drupal et il est impossible de faire quelque chose d'intéressant sans appeler une variable globale ici et là - comme l'utilisateur $ global par exemple). – dkinzer

Répondre

1

Pensez le mot-clé global plus comme un verbe qu'un adjectif. Votre premier exemple dit "référence assigner le global connu comme $ _global à $ _variable". Mais global n'est pas un adjectif. Le deuxième exemple, qui est correct, dit à php, "Traitez $ globales comme globales", ou "globales globales globales", et ensuite faites l'assignation.

+0

Cette réponse me semble la plus logique. Merci! – dkinzer

2

global est une construction particulière, il ne peut pas être utilisé dans les opérations que vous faites dans l'exemple 1.

2

Le mot-clé global est utilisé pour dire: « Utilisez la variable globale de ce nom, au lieu d'un local. " L'utilisation la plus courante est comme ceci:

$name = 'Slokun'; 

printName(); 
function printName() { 
    global $name; // Use the global, rather than function-local, version 
    echo $name; 
} 

qui imprimerait

Slokun 

Comparez à:

$name = 'Slokun'; 
printName(); 

function printName() { 
    echo $name; 
} 

qui n'imprimer quoi que ce soit

+0

Ce n'est pas exactement la réponse à ce qui est demandé (bien, selon le (mauvais) titre, c'est): il est clair que l'OP connaît déjà le mot-clé 'global', sa question est plutôt: pourquoi je ne peux pas utiliser le mot-clé 'global' dans les opérations, comme je le fais dans mon premier exemple? –

0

Votre code devrait être erroné. Le passage d'une valeur par référence devrait être:

1.)

$_variable =& $_global; 

2.)

$_variable = & $_global; 

3.)

$_variable = &$_global; 

1 ~ 3 sont la même chose.

Questions connexes