gpt4 book ai didi

PHP 闭包和隐式全局变量作用域

转载 作者:可可西里 更新时间:2023-10-31 22:54:17 24 4
gpt4 key购买 nike

有没有一种方法可以隐式将顶级变量声明为全局变量以用于闭包?

例如,如果使用这样的代码:

$a = 0; //A TOP-LEVEL VARIABLE

Alpha::create('myAlpha')
->bind(DataSingleton::getInstance()
->query('c')
)
->addBeta('myBeta', function($obj){
$obj->bind(DataSingleton::getInstance()
->query('d')
)
->addGamma('myGamma', function($obj){
$obj->bind(DataSingleton::getInstance()
->query('a')
)
->addDelta('myDelta', function($obj){
$obj->bind(DataSingleton::getInstance()
->query('b')
);
});
})
->addGamma('myGamma', function($obj){

$a++; //OUT OF MY SCOPE

$obj->bind(DataSingleton::getInstance()
->query('c')
)
.
.
.

闭包是从这样的方法中调用的:

    public function __construct($name, $closure = null){
$this->_name = $name;
is_callable($closure) ? $closure($this) : null;
}

所以在总结/TL;DR 中,有没有一种方法可以在不使用 global 关键字或$GLOBALS 超全局?

我在另一个我常去的论坛 ( http://www.vbforums.com/showthread.php?p=3905718#post3905718 ) 开始了这个话题

最佳答案

你必须在闭包定义中声明它们:

->addBeta('myBeta', function($obj) use ($a) { // ...

否则你必须使用global关键字。您也必须为每个使用 $a 的闭包执行此操作。

关于PHP 闭包和隐式全局变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4054424/

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