PHP变量范围-如何在不使用参数的情况下在两个函数之间共享变量?
我有一个脚本中的小问题,我无法独自解决。研究了关于变量范围的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中声明(并返回)的 通常我会将此变量作为参数传
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();