web-dev-qa-db-fra.com

Déclarer une variable globale dans une fonction

J'ai deux fichiers PHP. Dans le premier, j'ai défini un cookie basé sur une valeur $_GET, puis appelé une fonction qui envoie cette valeur à l'autre fichier. C'est un code que j'utilise dans join.php :

include('inc/processJoin.php');
setcookie("site_Referral", $_GET['rid'], time()+10000);
$joinProc = new processJoin();
$joinProc->grabReferral($_COOKIE["site_Referral"]);

L’autre fichier ( processJoin.php ) enverra ensuite cette valeur (entre autres) à d’autres fichiers qui traiteront et inséreront les données dans la base de données.

Le problème que je rencontre est que, lorsque la fonction grabReferral() de processJoin.php est appelée, la variable $referralID n'est pas définie à l'échelle globale - les autres fonctions de processJoin.php ne semblent pas pouvoir y accéder pour être envoyées. autres fichiers/processus.

J'ai essayé ceci dans processJoin.php :

grabReferral($rid) {
   global $ref_id;
   $ref_id = $rid;
}

someOtherFunction() {
   sendValue($ref_id);
}

Mais someOtherFunction ne semble pas pouvoir accéder ou utiliser la valeur $ref_id. J'ai aussi essayé d'utiliser define() en vain. Qu'est-ce que je fais mal?

16
hohner

vous devez également définir la variable globale dans la deuxième fonction.

// global scope
$ref_id = 1;

grabReferral($rid){
   global $ref_id;
   $ref_id = $rid;
}

someOtherFunction(){
    global $ref_id;
    sendValue($ref_id);
}

félix

30
Felix Geenen

personnellement, je recommanderais le $GLOBALS super variable.

function foo(){
  $GLOBALS['foobar'] = 'foobar';
}
function bar(){
  echo $GLOBALS['foobar'];
}
foo();
bar();

DÉMO

21
Brad Christie

C'est un code simple et fonctionnel pour initialiser une variable globale à partir d'une fonction: 

function doit()
{
    $GLOBALS['val'] = 'bar';
}
doit();
echo $val;

Donne la sortie comme:

bar
10
Vin

Les travaux suivants.

<?php

    foo();
    bar();

    function foo()
    {
        global $jabberwocky;
        $jabberwocky="Jabberwocky<br>";

        bar();
    }

    function bar()
    {
        global $jabberwocky;
        echo $jabberwocky;
    }

?>

produire:

Jabberwocky
Jabberwocky

Il semble donc qu'une variable d'abord déclarée comme globale dans une fonction puis initialisée dans cette fonction acquiert une portée globale.

2
Leo smith

Avertissement: aucun de ce code n'a été testé, mais il fait clairement passer le message.

Choisissez un name pour la variable que vous souhaitez voir disponible dans la portée globale . Dans la fonction, attribuez une valeur à l'index name du tableau $ GLOBALS.

function my_function(){

    //...

    $GLOBALS['myGlobalVariable'] = 42;    //globalize variable

    //...
}

Désormais, lorsque vous souhaitez accéder à la variable à partir du code exécuté dans la portée globale, c’est-à-dire PAS au sein d’une fonction, vous pouvez simplement utiliser $ name pour y accéder, sans faire référence au tableau $ GLOBALS.

<?php
    //<global scope>

    echo $myGlobalVariable;  //outputs "42"

    //</global scope>
?>

Pour accéder à votre variable globale à partir d'une étendue non globale telle qu'une fonction ou un objet, vous avez deux options:

  1. Accédez-y via l'index approprié du tableau $ GLOBALS. Ex: $GLOBALS['myGlobalVariable'] La saisie est longue, surtout si vous devez utiliser la variable globale plusieurs fois dans votre étendue non globale.
  2. Une manière plus concise consiste à importer votre variable globale dans l'étendue locale à l'aide de l'instruction 'globale'. Après avoir utilisé cette instruction, vous pouvez référencer la variable globale comme s’il s’agissait d’une variable locale. Les modifications que vous apportez à la variable seront reflétées globalement.

        //<non global scopes>
        function a(){
            //...
            global $myGlobalVariable;
            echo $myGlobalVariable;    // outputs "42"
            //...
         }
        function b(){
            //...
            echo $GLOBALS['myGlobalVariable'];    // outputs "42"
            echo $myGlobalVariable;               // outputs "" (nothing)
                                                  // ^also generates warning - variable not defined
            //...             
        }
        //</non global scopes>
    

Veuillez utiliser les variables globales dans toutes les langues avec prudence, en particulier en PHP.

Voir les ressources suivantes pour une discussion sur les variables globales: 

1
Carl Schroedl

Le mot clé global vous permet de accéder à une variable globale, pas en créer une. Les variables globales sont celles créées dans la portée la plus externe (c'est-à-dire pas dans une fonction ou une classe) et ne sont pas accessibles dans la fonction à moins que vous ne les déclariez avec global.

1
Matteo Riva

La visibilité d'une variable

J'espère que ça a aidé

<?php
$a = 1;
$b = 2;

function Sum()
{
    global $a, $b;

    $b = $a + $b;
} 

Sum();
echo $b;
?>
0
Khachatur Danielyan