使用传递的变量的func_get_args相当于什么?

时间:2017-03-01 22:00:26

标签: php

我想知道是否有一种方法可以列出使用use将变量暴露给闭包的方法,就像func_get_args()对正常参数所做的那样。

Example

<?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`?
});

2 个答案:

答案 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)
}