我想知道是否有一种方法可以列出使用use
将变量暴露给闭包的方法,就像func_get_args()
对正常参数所做的那样。
<?php
$hello = 'Hello';
$arr = ['Foo'];
array_walk($arr, function($item) use($hello) {
echo "$hello $item \n\n";
print_r(func_get_args());
// Here, is there a way to list variables passed with `use`?
});
答案 0 :(得分:3)
看一下这个稍微修改过的代码版本:
<?php
$hello = 'Hello';
$arr = ['Foo'];
$invisible = 'hopefully';
array_walk($arr, function($item) use($hello) {
echo "$hello $item \n\n";
print_r(func_get_args());
print_r(get_defined_vars());
});
这个输出是:
Array
(
[0] => Foo
[1] => 0
)
Array
(
[item] => Foo
[hello] => Hello
)
这可能回答了你的问题,两者的交集应该是use()
构造中的变量列表......
答案 1 :(得分:2)
忽略获取use
语句中传递的变量没有意义。因为他们在执行期间无法改变。
但是可以从外部通过PHP的反射API:
<?php
$a = 42;
$b = function () use ($a) {
echo $a;
};
$refl = new ReflectionFunction($b);
var_dump($refl->getStaticVariables());
输出:
$ php test.php
array(1) {
["a"]=>
int(42)
}