我一直在为PHP 5.3编写一些代码,我想做类似于我在下面显示的代码。我希望这段代码可以打印'hellohello',但它打印'hello'而不是错误。
$ inner闭包似乎无法访问外部函数的参数。这是正常的行为吗?这是一个PHP错误吗?我看不出这怎么可能被认为是正确的行为...
<?php
function outer($var) {
print $var;
$inner = function() {
print $var;
};
$inner();
}
outer('hello');
谢谢!
答案 0 :(得分:5)
您需要使用use
关键字。有关详细信息,请参阅this。
Wikipedia has some explanation of this:
function getAdder($x)
{
return function ($y) use ($x) {
return $x + $y;
};
}
$adder = getAdder(8);
echo $adder(2); // prints "10"
这里,getAdder()函数使用参数$ x(关键字“use”强制从上下文获取变量)创建一个闭包,它接受额外的参数$ y并将其返回给调用者。
因此,要使您的示例以您希望的方式工作:
<?php
function outer($var) {
print $var;
$inner = function() use ($var) {
print $var;
};
$inner();
}
outer('hello');
答案 1 :(得分:0)
我猜想$ inner函数没有访问$ var
的范围试试这个
function outer($var) {
print $var;
$inner = function($var) {
print $var;
};
$inner($var);
}
outer('hello');