我知道这是我在这里尝试的一种hacky,但我想知道这是否可能。无论如何我可以访问以下代码中的$x
变量,而不传递参数?
function foo() {
$x = 1;
return bar();
}
function bar() {
//get $x from foo here somehow?
return $x ? 'stuff' : 'other stuff';
}
答案 0 :(得分:4)
我不知道为什么,但你可以使用全局开放的东西,但我会告诉你:
function foo() {
global $x;
$x = 1;
return bar();
}
function bar() {
global $x;
//get $x from foo here somehow?
return $x ? 'stuff' : 'other stuff';
}
以下是演示:http://codepad.org/fPqUXzyC
最好不要使用全局变量并只传递参数,但如果不能,则可以使用全局变量
答案 1 :(得分:4)
class baz {
private $x;
public function foo() {
$this->x = 1;
return $this->bar();
}
public function bar() {
return $this->x ? 'stuff' : 'other stuff';
}
}
答案 2 :(得分:3)
您可以foo()
将$x
值存储到$GLOBALS[]
或global $x;
。除此之外,没有什么我能想到会做到的。需要有目的地暴露它以从另一个函数内部获取它。
如果这是您的代码,我可能会建议考虑采用面向对象的方法。
class Foo
{
public static $x;
public static function Foo(){
Foo::$x = 1;
return Foo::Bar();
}
public static function Bar() {
return Foo::$x ? 'stuff' : 'other stuff';
}
}
echo Foo::Foo();
或者,像其他人一样建议并将$x
作为函数参数传递。
答案 3 :(得分:0)
我知道这有点老了,答案已经被接受了,但这不会有效吗?
function foo()
{
$x = 1;
return bar($x);
}
function bar($x)
{
return $x ? 'stuff' : 'other stuff';
}