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