gpt4 book ai didi

php - PHP 在匿名函数/闭包中是否有词法作用域?

转载 作者:可可西里 更新时间:2023-11-01 12:52:25 25 4
gpt4 key购买 nike

我正在使用 PHP 5.4 并想知道我正在制作的匿名函数是否具有词法范围?

即如果我有一个 Controller 方法:

protected function _pre() {
$this->require = new Access_Factory(function($url) {
$this->redirect($url);
});
}

当 Access Factory 调用传递给它的函数时,$this 会引用定义它的 Controller 吗?

最佳答案

匿名函数不使用词法范围,但是 $this is a special case and will automatically be available inside the function as of 5.4.0 .您的代码应按预期工作,但不能移植到较旧的 PHP 版本。


以下将工作:

protected function _pre() {
$methodScopeVariable = 'whatever';
$this->require = new Access_Factory(function($url) {
echo $methodScopeVariable;
});
}

相反,如果您想将变量注入(inject)到闭包的作用域中,您可以使用 use 关键字。以下起作用:

protected function _pre() {
$methodScopeVariable = 'whatever';
$this->require = new Access_Factory(function($url) use ($methodScopeVariable) {
echo $methodScopeVariable;
});
}

在 5.3.x 中,您可以使用以下解决方法访问 $this:

protected function _pre() {
$controller = $this;
$this->require = new Access_Factory(function($url) use ($controller) {
$controller->redirect($url);
});
}

参见 this question and its answers了解更多详情。

关于php - PHP 在匿名函数/闭包中是否有词法作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364472/

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