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

时间:2014-02-22 09:10:44

标签: php global-variables scope

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

采用以下示例:

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

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

你知道,问题在于my_funct_b$a不可用,因为它已在my_funct_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_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;
}

这也行不通。为什么?是否可以不将变量作为参数传递?

4 个答案:

答案 0 :(得分:1)

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

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;
}

答案 1 :(得分:0)

如果您需要$a的值并且只能使用my_funct_a()创建,则将其作为依赖项添加到my_funct_b()中:

function my_funct_b() 
{
    $a = my_funct_a();
    // Do other stuff

    return $a + $b;
}

答案 2 :(得分:0)

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

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();

DEMO

答案 3 :(得分:-1)

$a = 1;
$b = 2;

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

    $b = $a + $b;
} 

Sum();
echo $b;
  

上面的脚本将输出3.通过在其中声明$ a和$ b global   函数,对任一变量的所有引用都将引用   全球版。

http://www.php.net/manual/en/language.variables.scope.php