我有两个PHP文件。在第一个我基于$_GET
值设置cookie,然后调用一个函数,然后将该值发送到另一个文件。这是我在 join.php :
include('inc/processJoin.php');
setcookie("site_Referral", $_GET['rid'], time()+10000);
$joinProc = new processJoin();
$joinProc->grabReferral($_COOKIE["site_Referral"]);
另一个文件( processJoin.php )会将此值(以及其他文件)发送到更多文件,这些文件将处理数据并将数据插入数据库。
我遇到的问题是,当调用 processJoin.php 中的grabReferral()
函数时,$referralID
变量未在全球范围内定义 - processJoin.php
中的其他功能似乎无法访问它以发送到其他文件/进程。
我在 processJoin.php :
中尝试了这个grabReferral($rid) {
global $ref_id;
$ref_id = $rid;
}
someOtherFunction() {
sendValue($ref_id);
}
但someOtherFunction似乎无法访问或使用$ref_id
值。我也尝试使用define()
无济于事。我做错了什么?
答案 0 :(得分:30)
你必须在第二个函数中定义全局变量..
// global scope
$ref_id = 1;
grabReferral($rid){
global $ref_id;
$ref_id = $rid;
}
someOtherFunction(){
global $ref_id;
sendValue($ref_id);
}
费利克斯
答案 1 :(得分:21)
就个人而言,我会推荐$GLOBALS
超级变量。
function foo(){
$GLOBALS['foobar'] = 'foobar';
}
function bar(){
echo $GLOBALS['foobar'];
}
foo();
bar();
<强> DEMO
答案 2 :(得分:10)
这是一个简单而有效的代码,用于从函数初始化全局变量:
function doit()
{
$GLOBALS['val'] = 'bar';
}
doit();
echo $val;
输出为:
bar
答案 3 :(得分:2)
以下作品。
<?php
foo();
bar();
function foo()
{
global $jabberwocky;
$jabberwocky="Jabberwocky<br>";
bar();
}
function bar()
{
global $jabberwocky;
echo $jabberwocky;
}
?>
生产:
Jabberwocky
Jabberwocky
所以似乎变量首先在函数内声明为全局变量,然后在该函数内部初始化,获取全局范围。
答案 4 :(得分:1)
global
关键字可让您访问全局变量,而不是创建全局变量。全局变量是在最外层范围内创建的(即不在函数或类中),并且在函数内部不可访问,除非您使用global
声明它们。
答案 5 :(得分:1)
免责声明:此代码均未经过测试,但绝对可以解决问题。
为要在全局范围内使用的变量选择名称。 在函数内,为$ GLOBALS数组的 name 索引赋值。
function my_function(){
//...
$GLOBALS['myGlobalVariable'] = 42; //globalize variable
//...
}
现在,当您想要从全局范围内运行的代码(即不在函数中)中访问变量时,您只需使用$ name 即可访问它,而无需引用$ GLOBALS数组。 / p>
<?php
//<global scope>
echo $myGlobalVariable; //outputs "42"
//</global scope>
?>
要从非全局范围(如函数或对象)访问全局变量,您有两种选择:
$GLOBALS['myGlobalVariable']
这需要很长时间才能输入,特别是如果您需要在非全局范围内多次使用全局变量。更简洁的方法是使用'global'语句将全局变量导入本地范围。使用此语句后,您可以引用全局变量,就好像它是局部变量一样。您对变量所做的更改将全局反映。
//<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>
请谨慎使用任何语言的全局变量,尤其是在PHP中。
有关全局变量的讨论,请参阅以下资源:
答案 6 :(得分:0)
我希望有帮助
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>