在函数内声明全局变量

hoh*_*ner 17 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"]);
Run Code Online (Sandbox Code Playgroud)

然后,另一个文件(processJoin.php)将此值(以及其他文件)发送到将处理数据并将数据插入数据库的其他文件.

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

我在processJoin.php中试过这个:

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

someOtherFunction() {
   sendValue($ref_id);
}
Run Code Online (Sandbox Code Playgroud)

但someOtherFunction似乎无法访问或使用该$ref_id值.我也尝试使用define()无济于事.我究竟做错了什么?

Fel*_*nen 31

你必须在第二个函数中定义全局变量..

// global scope
$ref_id = 1;

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

someOtherFunction(){
    global $ref_id;
    sendValue($ref_id);
}
Run Code Online (Sandbox Code Playgroud)

费利克斯


Bra*_*tie 22

就个人而言,我会推荐$GLOBALS超级变量.

function foo(){
  $GLOBALS['foobar'] = 'foobar';
}
function bar(){
  echo $GLOBALS['foobar'];
}
foo();
bar();
Run Code Online (Sandbox Code Playgroud)

DEMO


Vin*_*Vin 10

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

function doit()
{
    $GLOBALS['val'] = 'bar';
}
doit();
echo $val;
Run Code Online (Sandbox Code Playgroud)

输出为:

bar
Run Code Online (Sandbox Code Playgroud)


小智 5

以下作品。

<?php

    foo();
    bar();

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

        bar();
    }

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

?>
Run Code Online (Sandbox Code Playgroud)

生产:

贾伯沃基
贾伯沃基

因此,似乎变量首先在函数内声明为全局变量,然后在该函数内初始化,从而获得全局范围。