匿名函数和引用中的php闭包&;
我有: 输出:匿名函数和引用中的php闭包&;,php,closures,anonymous-function,Php,Closures,Anonymous Function,我有: 输出:已超出限制 我的理解是: on$inside=外部(2)这将返回匿名函数和 将其分配给变量$inside。匿名函数使用 $limit(2)和$tally(0)的值 调用函数$inside()。这会将$tally增加到1 值以某种方式被记住,$limit。目的何在 在$tally之前的符号的长度?我知道这是用来创造的 但在这种情况下,我感到困惑。这怎么可能结束呢 还记得$limit的值吗 任何参考官方文件都会有帮助 The&表示通过引用而不是值传递参数。这意味着您可以在函数内部更改变
已超出限制
我的理解是:
$inside=外部(2)
这将返回匿名函数和
将其分配给变量$inside
。匿名函数使用
$limit
(2)和$tally
(0)的值$inside()
。这会将$tally
增加到1
值以某种方式被记住,$limit
。目的何在
在<代码>$tally之前的符号的长度?我知道这是用来创造的
但在这种情况下,我感到困惑。这怎么可能结束呢
还记得$limit
的值吗任何参考官方文件都会有帮助 The
&
表示通过引用而不是值传递参数。这意味着您可以在函数内部更改变量,它将在函数外部被记住,而不仅仅是在该函数中
通过将函数分配给$inside
,您可以有效地保持对变量的引用完整,因此它将在调用之间被记住
请参见匿名函数实际上是php中的
Closure
对象。如果将var\u dump($invoke)
添加到代码中,您将看到:
function outside( $limit ) {
$tally = 0;
return function() use ( $limit, &$tally ) {
$tally++;
if( $tally > $limit ) {
echo "limit has been exceeded";
}
};
}
$inside = outside( 2 );
$inside();
$inside();
$inside();
use
'd变量存储在closure对象的static
数组中。调用闭包时,这些变量将传递给函数,就像普通参数一样。因此,如果不使用引用,它们将通过复制来传递,函数中对它们的任何更改都不会产生任何影响。现在有一些有趣的代码!有一段时间没看到那些东西了。我真的抗议这个问题是重复的。虽然非常相似,但这个问题更多地关注通过引用传递的变量,而不是use
关键字本身的用法。我认为在函数中,关键字“static”用于“记住”目的,而不是用于记住的符号是的,这会起作用,但是&
意味着您可以从函数外部传递变量,例如对对象的引用或全局值(每次都不是同一个变量),即必须将其设置为函数外部的变量。您也可以按值传递变量(无&
)然后从函数返回该值并将其设置为同一变量。这在功能上是一样的。但是,如果您需要一个函数来更改两个变量(例如),那么这将变得更加复杂。$limit的值在未声明为引用的情况下如何在后续调用中保持不变?哦,好吧,既然它是闭包对象的静态属性,那么该值在后续调用中保持不变?我想我现在更了解品牌了。
object(Closure)#1 (1) {
["static"]=>
array(2) {
["limit"]=>
int(2)
["tally"]=>
int(0)
}
}