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



脚本中有一个小问题,我自己无法解决。在研究了关于变量作用域的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;
}

这也没有奏效。为什么?是否可以不将变量作为参数传递?

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

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_funct_a()创建,那么将其作为依赖项添加到my_funct_b():中

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

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

演示

$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
} 
Sum();
echo $b;

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

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

相关内容

  • 没有找到相关文章

最新更新