Php 在函数中声明全局变量
我有两个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_
$\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还: