PHP delegeleri veya geri çağrıları yapmanın doğru yolu

0 Cevap php

Ben php aşağıdaki deseni uygulamak gerekir:

class EventSubscriber
{
    private $userCode;
    public function __construct(&$userCode) { $this->userCode = &$userCode; }
    public function Subscribe($eventHandler) { $userCode[] = $eventHandler; }
}

class Event
{
    private $subscriber;
    private $userCode = array();

    public function __construct()
    {
        $this->subscriber = new Subscriber($this->userCode)
    }

    public function Subscriber() { return $this->subscriber; }

    public function Fire()
    {
        foreach ($this->userCode as $eventHandler)
        {
            /* Here i need to execute $eventHandler  */
        }
    }
}

class Button
{
    private $eventClick;

    public function __construct() { $this->eventClick = new Event(); }

    public function EventClick() { return $this->eventClick->Subscriber(); }

    public function Render()
    {
        if (/* Button was clicked */) $this->eventClick->Fire();

        return '<input type="button" />';
    }
}

class Page
{
    private $button;

    // THIS IS PRIVATE CLASS MEMBER !!!
    private function ButtonClickedHandler($sender, $eventArgs)
    {
        echo "button was clicked";
    }

    public function __construct()
    {
        $this->button = new Button();
        $this->button->EventClick()->Subscribe(array($this, 'ButtonClickedHandler'));
    }

    ...

}    

Bunu yapmak için doğru yolu budur.

P.S.

Ben bu amaçla call_user_func kullanarak ve özel sınıf üyeleri aramak için başardı ister inanın ister inanmayın, ama gelişimin birkaç hafta sonra ben çalışmayı durdurdu bulduk edilmiştir. Benim kodunda bir hata oldu oldu ya da bana 'call_user_func' özel sınıf fonksiyonlar, bilmiyorum mümkün çağrı, ama şimdi ben güvenle basit, hızlı ve zarif bir yöntem arıyorum düşünüyorum yapılan bazı başka şey diğer sınıftan kişinin özel bir sınıfın üyesi çağırıyor. Şu anda kapanışları için arıyorum, ama '$ bu' iç kapatılması ile ilgili sorunlar var ki ...

0 Cevap