在函数内声明全局变量

时间:2011-03-18 17:24:00

标签: php cookies global-variables

我有两个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()无济于事。我做错了什么?

7 个答案:

答案 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>
?>

要从非全局范围(如函数或对象)访问全局变量,您有两种选择:

  1. 通过$ GLOBALS数组的相应索引访问它。例如:$GLOBALS['myGlobalVariable']这需要很长时间才能输入,特别是如果您需要在非全局范围内多次使用全局变量。
  2. 更简洁的方法是使用'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>
    
  3. 请谨慎使用任何语言的全局变量,尤其是在PHP中。

    有关全局变量的讨论,请参阅以下资源:

答案 6 :(得分:0)

The visibility of a variable

我希望有帮助

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

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

    $b = $a + $b;
} 

Sum();
echo $b;
?>