Gibt es eine Möglichkeit, dass man implizit Top-Level-Variablen als global für den Einsatz in Schließungen deklarieren kann?PHP-Verschlüsse und implizite globale Variable Bereich
Zum Beispiel, wenn mit dem Code arbeiten wie folgt aus:
$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')
)
.
.
.
Die Verschlüsse von einer Methode als solche genannt werden:
public function __construct($name, $closure = null){
$this->_name = $name;
is_callable($closure) ? $closure($this) : null;
}
Also zusammenfassend/TL; DR, ist es eine Möglichkeit, Variablen implizit als global für die Verwendung in Schließungen (oder anderen Funktionen, die ich vermute) zu deklarieren, ohne das Schlüsselwort global
oder $GLOBALS
super-global zu verwenden?
begann ich dieses Thema in einem anderen Forum habe ich häufig (http://www.vbforums.com/showthread.php?p=3905718#post3905718)
Beachten Sie, dass 'use' nur Variablen vom übergeordneten Bereich erbt. In einem Szenario, in dem die Closures nicht im globalen Gültigkeitsbereich definiert sind, müssen Sie stattdessen das Schlüsselwort 'global' verwenden. Es sollte jedoch für das OP-Szenario funktionieren. – Gordon
Hmm, ich hatte Angst, es wäre "nutzen". Hoffentlich wird dieses Problem in dem System, das ich entwickle, nicht vorherrschend sein, da die meisten * globalen * Aufrufe wahrscheinlich zu statischen Instanzen gemacht werden. Ich versuche mit einem Trick zu experimentieren, der 'extract()' auf '$ GLOBALS' und 'call_user_func_array()' mit einbezieht ... – Dan
Außerdem würde '$ a ++' wie im Beispiel des OPs nicht auf das globale Beispiel angewendet '$ a', es sei denn, es wird als Referenz verwendet, z. B.' & $ a'. Objekte werden jedoch als Referenz verwendet. – Gordon