是否可以在PHP子函数中访问外部局部变量?
在下面的代码中,我想访问内部函数栏中的变量$l
。在栏中将$l
声明为global $l
不起作用。
function foo()
{
$l = "xyz";
function bar()
{
echo $l;
}
bar();
}
foo();
答案 0 :(得分:38)
你可能会使用Closure来做这件事......
编辑:花了一些时间来记住语法,但这就是它的样子:
function foo()
{
$l = "xyz";
$bar = function () use ($l)
{
var_dump($l);
};
$bar();
}
foo();
然后,运行脚本,你会得到:
$ php temp.php
string(3) "xyz"
几点注意事项:
;
!use
变量,在其名称前加&
:use (& $l)
有关更多信息,作为参考,您可以查看手册中的此页面:Anonymous functions
答案 1 :(得分:6)
您必须使用use
关键字。
$bar = function() use(&$l) {
};
$bar();
在非常古老的PHP 5.2及更早版本中,这不起作用。你得到的语法不是闭包,而是全局函数的定义。
function foo() { function bar() { } }
的作用与:
相同function foo() { include "file_with_function_bar.php"; }
如果您执行两次函数foo
,PHP会抱怨您已尝试重新定义(全局)函数bar
。
答案 2 :(得分:0)
您可以通过以下方式读取默认值:
function(){
return preg_match(
"yourVar = \d+"
, str_file_get_contents(functionFile)
, arrayToPutFieldsValue
);
}
如果您要同时使用两个功能块-就像某人正在使用勺子,并且您想从该勺子中获取食物-您会浪费食物,否则您中的一些人会饿死。 无论如何-您将必须以某种方式设置指针。 不调用其他函数或类的任何字段都是不可能的。 函数/方法类似于实例-需要调用它们。
通过访问具有同步功能的全局字段来共享公共字段。
答案 3 :(得分:0)
function a()
{
function val1($arg=null)
{
static $a;
if ($arg !== null) $a = $arg;
else return $a;
}
function b()
{
val1('1234');
echo val1() . '<br>'; // shows: 1234
val1('my custom data');
echo val1() . '<br>'; // shows: my custom data
}
b();
}
a();
使用 val1('my custom data')
设置我的值
使用val1()
获取我的价值