Есть ли способ неявно объявить переменные верхнего уровня глобальными для использования в замыканиях?
Например , при работе с таким кодом:
$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
super-global?
Я начал эту тему на другом форуме, который часто посещаю ( http: // www .vbforums.com / showthread.php? p = 3905718 # post3905718 )