我在脚本中遇到一个小问题,我自己无法解决。在研究了有关变量范围的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;
}
这也行不通。为什么?是否可以不将变量作为参数传递?
答案 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();
答案 3 :(得分:-1)
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
上面的脚本将输出3.通过在其中声明$ a和$ b global 函数,对任一变量的所有引用都将引用 全球版。