Tôi hiện đang có một module dependency injection cho phép tôi để tạo ra một nhà máy của các đối tượng:Làm thế nào để truy cập vào một vật thể thế giới bên trong một đóng phương pháp
class DiModule
{
private $Callbacks;
public function set(
$foo,
$bar
) {
$this->Callbacks[$foo] = $bar;
}
public function get(
$foo
) {
return $this->Callbacks[$foo];
}
}
sau đó tôi có một đối tượng sự kiện mà các cửa hàng đóng cửa phương pháp và phiên sẽ kích hoạt sự kiện.
Sau đó tôi có đối tượng người nghe tìm kiếm các phiên được đặt và kích hoạt sự kiện được liên kết với đối tượng đó.
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."];
}
}
Đây là một ví dụ về điều này được thực hiện
$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'));
Vấn đề là khi tôi cố gắng để truy cập toàn cầu $di
của tôi bên trong một kết thúc, tôi đã googled này nhiều lần nhưng không thể tìm thấy một giải pháp.
Chỉ có thể là một sai lầm trong mã mẫu của bạn, nhưng đối với tôi, có vẻ như các phương thức 'DiModule'' set' và 'get' được trộn lẫn. 'set' đang trả về đối tượng và' get' đang thiết lập nó. – Andy