PHP变量范围-如何在不使用参数的情况下在两个函数之间共享变量?

PHP变量范围-如何在不使用参数的情况下在两个函数之间共享变量?,php,global-variables,scope,Php,Global Variables,Scope,我有一个脚本中的小问题,我无法独自解决。研究了关于变量范围的PHP文档后,我不确定这是否可行 以以下为例: function my_funct_a() { // Do stuff return $a; } function my_funct_b() { // Do other stuff return $a + $b; } 你看,问题是在my_functt\u b中,$a不可用,因为它是在my_functt\u a中声明(并返回)的 通常我会将此变量作为参数传

我有一个脚本中的小问题,我无法独自解决。研究了关于变量范围的PHP文档后,我不确定这是否可行

以以下为例:

function my_funct_a() {
    // Do stuff
    return $a;
}

function my_funct_b() {
    // Do other stuff
    return $a + $b;
}
你看,问题是在
my_functt\u b
中,
$a
不可用,因为它是在
my_functt\u a
中声明(并返回)的

通常我会将此变量作为参数传递,但由于某种框架限制,这在此时是不可能的

所以我试着这样做:

function my_funct_a() {
    // Do stuff
    global $a;
    return $a;
}

function my_funct_b() {
    // Do other stuff
    global $a;
    return $a + $b;
}
这也不起作用,我想是因为
global
的作用是“相反的”。与其将变量声明为函数内部的全局变量以在函数外部可用,还不如将其声明为函数外部的全局变量以在函数内部可用

问题是,
$a
的值是在
my_funct\u a
中创建的,因此我无法在知道值之前对其进行全局设置。
因此,我试着这样做:

// global variable, but no value assigned yet
global $a

function my_funct_a() {
   // Do stuff
   global $a;
   $a = 1; 
   return $a;
}

function my_funct_b() {
   // Do other stuff
   global $a;
   return $a + $b;
}

这也没用。为什么?甚至可以不将变量作为参数传递吗?

封装数据和功能的最佳方法是类:

class Foo {

    protected $val = 1;

    public function inc() {
        return $this->val += 1;
    }

    public function dec() {
        return $this->val -= 1;
    }

}
我之所以展示它,是因为它应该用于支持全局变量

然而,这应该是可行的:

$val = 1;

function inc() {
    global $val;
    return $val += 1;
}


function dec() {
    global $val;
    return $val -= 1;
}

如果您需要
$a
的值,并且只能使用
my\u functt\u a()
创建该值,请将其作为依赖项添加到
my\u functt\u b()
中:

上面的脚本将输出3。通过在 函数中,对任一变量的所有引用都将引用 全球版本


全局
声明放在函数中。这会导致该函数中变量的使用引用全局变量,而不是局部变量。如果两个函数都访问相同的全局变量,它们将看到相同的值

function my_funct_a() {
    global $a;
    $a = 10;
    return $a;
}

function my_funct_b() {
    $b = 5;
    global $a;
    return $a + $b;
}

echo my_funct_a() . "\n";
echo my_funct_b();

这是一个类代码吗?在
我的函数b()
中,如何获得
$b
?对于
my_funct\u a()
顺便说一句。@DonCallisto否,该项目中使用了过程PHP。@Jack
$a
是在该函数中创建的动态值,
$b
是使用该动态值的字符串。恐怕我必须使用这两种功能来解决这个问题。您对
全局
工作原理的理解是错误的。您在函数中声明它,它允许该函数访问具有该名称的全局变量。你的第二次尝试应该奏效。这不是OP所要求的。这正是他所要求的。他不应该在声明全局变量(外部函数)时使用“global”这个词,就是这样。对我来说,这似乎是最好的解决方案,但也许——正如你在编辑之前所说的那样——我不明白真正的问题。。。
$a = 1;
$b = 2;

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

    $b = $a + $b;
} 

Sum();
echo $b;
function my_funct_a() {
    global $a;
    $a = 10;
    return $a;
}

function my_funct_b() {
    $b = 5;
    global $a;
    return $a + $b;
}

echo my_funct_a() . "\n";
echo my_funct_b();