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?
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
personnellement, je recommanderais le $GLOBALS
super variable.
function foo(){
$GLOBALS['foobar'] = 'foobar';
}
function bar(){
echo $GLOBALS['foobar'];
}
foo();
bar();
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
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.
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:
$GLOBALS['myGlobalVariable']
La saisie est longue, surtout si vous devez utiliser la variable globale plusieurs fois dans votre étendue non globale.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:
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
.
J'espère que ça a aidé
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>