是否可以在 PHP 中访问外部局部变量?

2022-08-30 14:50:03

是否可以在 PHP 子函数中访问外部局部变量?

在下面的代码中,我想访问内部功能栏中的变量。声明为在 bar 中不起作用。$l$lglobal $l

function foo()
{
    $l = "xyz";

    function bar()
    {
        echo $l;
    }
    bar();
}
foo();

答案 1

你可以使用闭包,来做到这一点...


编辑 :花了一些时间来记住语法,但下面是它看起来的样子:

function foo()
{
    $l = "xyz";
    $bar = function () use ($l)
    {
        var_dump($l);
    };
    $bar();
}
foo();

而且,运行脚本,您将获得:

$ php temp.php
string(3) "xyz"


一些注意事项:

  • 您必须在函数的声明之后放置一个 !;
  • 你可以通过引用变量,在它的名字之前加上:use&use (& $l)

有关详细信息,作为参考,可以在手册中查看此页面:匿名函数


答案 2

您必须使用关键字。use

$bar = function() use(&$l) {
};
$bar();

在非常古老的 PHP 5.2 及更早版本中,这不起作用。你得到的语法不是闭包,而是全局函数的定义。

function foo() { function bar() { } }

工作原理与:

function foo() { include "file_with_function_bar.php"; }

如果你执行函数两次,PHP会抱怨你试图重新定义一个(全局)函数。foobar


推荐