मैं वर्तमान में जो मुझे वस्तुओं की एक कारखाना बनाने की अनुमति देता एक निर्भरता इंजेक्शन मॉड्यूल है अंदर एक वैश्विक वस्तु का उपयोग कैसे करें:एक विधि बंद
class DiModule
{
private $Callbacks;
public function set(
$foo,
$bar
) {
$this->Callbacks[$foo] = $bar;
}
public function get(
$foo
) {
return $this->Callbacks[$foo];
}
}
मैं तो एक घटना वस्तु जो एक विधि बंद करने और संग्रहीत करता है सत्र जो घटना को ट्रिगर करेगा।
class Event
{
private $Sesh;
private $Method;
public function set(
$sesh = array(),
$method
) {
$this->Sesh = $sesh;
$this->Method = $method;
}
public function get(
) {
return [$this->Sesh,$this->Method];
}
}
मेरे पास एक श्रोता ऑब्जेक्ट है जो सत्र सेट की खोज करता है और उस ऑब्जेक्ट से जुड़े ईवेंट को ट्रिगर करता है।
class Listener
{
private $Sesh;
public function setSesh(
$foo
) {
$this->Sesh = $foo;
}
private $Event;
public function set(
$foo,
Event $event
) {
$this->Event[$foo] = $event;
}
public function dispatch(
$foo
) {
$state = true;
if(isset($this->Event[$foo]))
{
foreach($this->Event[$foo]->get()[0] as $sesh)
{
if(!isset($this->Sesh[$sesh]) || empty($this->Sesh[$sesh]))
{
$state = false;
}
}
}
return ($state) ? [true, $this->Event[$foo]->get()[1]()] : [false, "Event was not triggered."];
}
}
यह इस का एक उदाहरण
$di = new DiModule();
$di->set('L', new Listener());
$di->set('E', new Event());
$di->get('E')->set(['misc'], function() { global $di; return $di; });
$di->get('L')->setSesh(array('misc' => 'active')); // not actual sessions yet
$di->get('L')->set('example', $di->get('E'));
var_dump($di->get('L')->dispatch('example'));
निष्पादित किया जा रहा है मुद्दा है जब मैं एक बंद अंदर मेरे वैश्विक $di
तक पहुँचने का प्रयास, मैं यह कई बार googled है लेकिन एक समाधान नहीं मिल रहा।
आपके नमूना कोड में केवल एक गलती हो सकती है, लेकिन मेरे लिए ऐसा लगता है कि आपके 'DiModule'' set' और 'get' विधियां मिश्रित हैं। 'सेट' ऑब्जेक्ट को वापस कर रहा है और' get' इसे सेट कर रहा है। – Andy