Php 在函数中声明全局变量

Php 在函数中声明全局变量,php,cookies,global-variables,Php,Cookies,Global Variables,我有两个PHP文件。在第一个示例中,我根据一个$\u GET值设置了一个cookie,然后调用一个函数,该函数将该值发送到另一个文件。这是我在join.php中使用的一些代码: include('inc/processJoin.php'); setcookie("site_Referral", $_GET['rid'], time()+10000); $joinProc = new processJoin(); $joinProc->grabReferral($_COOKIE["site_

我有两个PHP文件。在第一个示例中,我根据一个
$\u GET
值设置了一个cookie,然后调用一个函数,该函数将该值发送到另一个文件。这是我在join.php中使用的一些代码:

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

someOtherFunction() {
   sendValue($ref_id);
}
然后,另一个文件(processJoin.php)将此值(以及其他)发送到其他文件,这些文件将处理数据并将其插入数据库

我遇到的问题是,当调用processJoin.php中的
grabReferral()
函数时,
$referralID
变量没有在全局范围内定义-
processJoin.php
中的其他函数似乎无法访问它以发送到其他文件/进程

我在processJoin.php中尝试过这一点:

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

someOtherFunction() {
   sendValue($ref_id);
}

但是SomeOther函数似乎无法访问或使用
$ref\u id
值。我也尝试过使用
define()
,但没有效果。我做错了什么?

您还必须在第二个函数中定义全局变量

// global scope
$ref_id = 1;

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

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

felix

我个人建议使用超级变量

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

关键字
global
允许您访问全局变量,而不是创建全局变量。全局变量是在最外层范围内创建的变量(即不在函数或类内部),在函数内部无法访问全局变量,除非您使用
Global
声明:此代码均未经过测试,但它肯定能说明问题

为要在全局范围内可用的变量选择名称。 在函数中,为$GLOBALS数组的名称索引赋值

function my_function(){

    //...

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

    //...
}
<?php
    //<global scope>

    echo $myGlobalVariable;  //outputs "42"

    //</global scope>
?>
现在,当您想从全局范围内(即不在函数内)运行的代码中访问变量时,只需使用$name访问它,而无需引用$GLOBALS数组

function my_function(){

    //...

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

    //...
}
<?php
    //<global scope>

    echo $myGlobalVariable;  //outputs "42"

    //</global scope>
?>
请在任何语言中谨慎使用全局变量,尤其是在PHP中

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


这是一个从函数初始化全局变量的简单有效代码:

function doit()
{
    $GLOBALS['val'] = 'bar';
}
doit();
echo $val;
给出如下输出:

bar
下面的工作

<?php

    foo();
    bar();

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

        bar();
    }

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

?>

制作:

贾伯沃基
贾伯沃基

因此,似乎一个变量首先在函数中声明为全局变量,然后在该函数中初始化,就获得了全局范围。

我希望这有帮助

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

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

    $b = $a + $b;
} 

Sum();
echo $b;
?>


为什么使用全局变量?几乎总是有更好的解决办法。@MattBall:同意。基于变量名,我冒昧地说
define('REF_ID',$ID)
如果(已定义('REF_ID'))…
是更好的解决方案。@Brad不,不会。避免全局作用域。@BradChristie当我在
grabReferral()
函数中使用
define('REF\u ID',$rid)
时,我无法访问
someotherFunction()
函数中的常量。还有什么想法吗?是$GLOBALS,没有下划线。@marcB真的。我习惯于为$\u POST/$\u GET将其连接起来。接得好,谢谢。@MarcB:是的,我不知道
MYSQL\u BOTH
=MYSQL\u fetch\u array,
CURLOPT\u HEADER
=curl\u setopt,
PHP\u URL\u HOST
=parse\u URL?wtf;pSee还: