PHP函数范围

时间:2011-05-10 19:33:45

标签: php

我知道这是我在这里尝试的一种hacky,但我想知道这是否可能。无论如何我可以访问以下代码中的$x变量,而不传递参数?

function foo() {
 $x = 1;
 return bar();
}

function bar() {
  //get $x from foo here somehow?
  return $x ? 'stuff' : 'other stuff';
}

4 个答案:

答案 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'; 
  }