在 PHP 中调用嵌套的 Lambda 函数
Calling Nested Lambda Function in PHP
是否可以嵌套调用lambda函数
<?php
$func=function() use($something,$func /** as you know it will be undefined so what could be other way arround**/){
if($something){
$func();
}
}
$func
传递给 $func
时尚未定义。 $func
只会在函数定义之后立即定义,这对于它的工作来说有点太晚了。
简单的解决方法如下:
$func = null;
$func = function() use (&$func) {
}
use $func
无法成功,因为 $func
在 lambda 创建完成并返回 lamba 之前不会被定义。 PHP 无法进行时间旅行。
你也不能做这样的事情:
$func = '';
$func = function() use $something, $func ....;
虽然绕过了 $func is not defined
,但它也在创建 lambda 时 "locks" 将 $func
的值放入 lambda 中:
php > $foo = 'bar';
php > $baz = function() use($foo) { echo $foo; };
php > $baz();
bar
php > $foo = 'qux';
php > $baz();
bar
是否可以嵌套调用lambda函数
<?php
$func=function() use($something,$func /** as you know it will be undefined so what could be other way arround**/){
if($something){
$func();
}
}
$func
传递给 $func
时尚未定义。 $func
只会在函数定义之后立即定义,这对于它的工作来说有点太晚了。
简单的解决方法如下:
$func = null;
$func = function() use (&$func) {
}
use $func
无法成功,因为 $func
在 lambda 创建完成并返回 lamba 之前不会被定义。 PHP 无法进行时间旅行。
你也不能做这样的事情:
$func = '';
$func = function() use $something, $func ....;
虽然绕过了 $func is not defined
,但它也在创建 lambda 时 "locks" 将 $func
的值放入 lambda 中:
php > $foo = 'bar';
php > $baz = function() use($foo) { echo $foo; };
php > $baz();
bar
php > $foo = 'qux';
php > $baz();
bar