PHP 如何根据闭包变量中的结构找到对应函数体代码片段?
一个闭包函数存储到变量中时,打印变量的结构体,我们仅能看对参数的存储,看不到对闭包函数体代码的存储。那么当执行闭包时,PHP是如何找到这个闭包函数变量对应的函数体代码,进而执行的呢?
示例代码
$name = 'xiaoming';
$age = 11;
$f1 = function() use ($name, $age) {
echo '执行 f1'.PHP_EOL;
};
var_dump($f1);
$f2 = function() use ($f1) {
echo '执行 f2'.PHP_EOL;
$f1();
};
var_dump($f2);
call_user_func($f1);
echo '==='.PHP_EOL;
call_user_func($f2);
结果
object(Closure)#1 (1) {
["static"]=>
array(2) {
["name"]=>
string(8) "xiaoming"
["age"]=>
int(11)
}
}
object(Closure)#2 (1) {
["static"]=>
array(1) {
["f1"]=>
object(Closure)#1 (1) {
["static"]=>
array(2) {
["name"]=>
string(8) "xiaoming"
["age"]=>
int(11)
}
}
}
}
执行 f1
===
执行 f2
执行 f1
推荐文章: