gpt4 book ai didi

php - PHP显式变量在闭包中的优势

转载 作者:行者123 更新时间:2023-11-30 18:28:03 28 4
gpt4 key购买 nike

在 PHP 中,如果你想访问外部作用域中的变量,你需要显式声明它,例如

$foo = 'bar';
func (function() use ($foo) {

echo $foo;

});

但在 JavaScript 中,它们是隐式的,例如

foo = 'bar';
func (function() {
console.log(foo);
});

这两种闭包的优缺点是什么?

最佳答案

In PHP, if you want to access variable in the outer scope, you need to declare it explicitly [...] use ($foo)

从技术上讲,您的函数不会在外部范围内访问 $foo。为此,您需要:

$foo = 'bar';
$func = function() {
global $foo;
echo $foo;
};

这不是闭包。 函数中没有关闭任何变量。如果 $foo 的值发生变化,下一次调用 func 将反射(reflect): p>

$func(); // bar
$foo = 'baz';
$func(); // baz

但是,如果我们用 func 关闭 $foo:

$foo = 'bar';
$func = function() use ($foo) {
echo $foo;
};

$func(); // bar
$foo = 'baz';
$func(); // bar

func$foo 将保留它的值,因为它已被封闭到函数中。

要在 JavaScript 中做同样的事情,您只需在函数内创建一个函数,然后将创建一个闭包(让内部函数访问封闭函数的范围):

function getFunc(foo) {
return function () {
console.log(foo);
};
}

foo = "bar";
func = getFunc(foo);
func(); // bar
foo = "baz";
func(); // bar

What are the advantages and disadvantage of these two type of closure?

使用“堆”类型的作用域,而不是堆栈,这样变量环境就可以附加到函数上,这使得一流的函数更加灵活,因为它们可以传递和调用,而不用担心创建(或传入)一组特定的变量以使函数可用。

关于php - PHP显式变量在闭包中的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319529/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com