是否可以在PHP子函数中访问外部局部变量?
在下面的代码中,我想访问$l内部函数栏中的变量.声明$l是global $l在酒吧不起作用.
function foo()
{
$l = "xyz";
function bar()
{
echo $l;
}
bar();
}
foo();
Run Code Online (Sandbox Code Playgroud)
Pas*_*TIN 39
你可以使用Closure来做那个......
编辑:花了一些时间来记住语法,但这是它的样子:
function foo()
{
$l = "xyz";
$bar = function () use ($l)
{
var_dump($l);
};
$bar();
}
foo();
Run Code Online (Sandbox Code Playgroud)
并且,运行脚本,你会得到:
$ php temp.php
string(3) "xyz"
Run Code Online (Sandbox Code Playgroud)
几点说明:
;在功能声明之后加上一个!use通过引用变量,使用&之前的名称:use (& $l)有关更多信息,作为参考,您可以在手册中查看此页面:匿名函数
您必须使用use关键字.
$bar = function() use(&$l) {
};
$bar();
Run Code Online (Sandbox Code Playgroud)
在非常古老的PHP 5.2及更早版本中,这不起作用.你得到的语法不是闭包,而是全局函数的定义.
function foo() { function bar() { } }
Run Code Online (Sandbox Code Playgroud)
与以下相同:
function foo() { include "file_with_function_bar.php"; }
Run Code Online (Sandbox Code Playgroud)
如果你执行foo两次函数,PHP会抱怨你试图重新定义一个(全局)函数bar.