访问父函数中定义的变量

时间:2011-02-08 20:41:59

标签: php scope

有没有办法从$foo内访问inner()

function outer()
{
    $foo = "...";

    function inner()
    {
        // print $foo
    }

    inner();
}

outer();

5 个答案:

答案 0 :(得分:43)

PHP< 5.3不支持闭包,所以你必须将$ foo传递给inner()或者从outer()和inner()(BAD)中创建$ foo全局。

在PHP 5.3中,您可以执行

function outer()
{
  $foo = "...";
  $inner = function() use ($foo)
  {
    print $foo;
  };
  $inner();
}
outer();
outer();

答案 1 :(得分:1)

或者我错过了一些你想要做的更复杂的事情?

function outer()
{
    $foo = "...";

    function inner($foo)
    {
        // print $foo
    }

    inner($foo);
}

outer();

编辑好吧我想我知道你要做什么。您可以使用全局类来完成此操作,但不确定此特定情况

答案 2 :(得分:0)

我知道这可以通过类来完成,但是对于独立的函数,我确信如果不设置公共/私有变量就无法进行检索。

但是我能想到的唯一可能的方式(没有经历过这种类型的东西)是将$ foo传递给内部然后进行回声或打印。 :)

答案 3 :(得分:0)

我想提一下,这可能不是编码的最佳方式,因为您在另一个内部定义了一个函数。总有比以这种方式做的更好的选择。

function outer()
{
    global $foo;
    $foo = "Let us see and understand..."; // (Thanks @Emanuil)

    function inner()
    {
        global $foo;
        print $foo;
    }

    inner();
}

outer();

这将输出: -

Let us see and understand...

您可以编写下面的代码片段,而不是以这种方式编写: -

function outer()
{
    $foo = "Let us see improved way...";

    inner($foo);

    print "\n";
    print $foo;
}

function inner($arg_foo)
{
    $arg_foo .= " and proper way...";
    print $arg_foo;
}

outer();

最后一段代码片段将输出: -

Let us see improved way... and proper way...
Let us see improved way...

但最后,总是取决于您将要使用的流程。希望它有所帮助。

答案 4 :(得分:0)

我认为不可能。

PHP手册对此有一些评论,并且没有人找到解决方案。

http://www.php.net/manual/en/language.variables.scope.php#77693

另一条评论表明嵌套函数实际上并不是“嵌套”的真实

http://www.php.net/manual/en/language.variables.scope.php#20407