delegeleri veya geri aramalar yapmanın doğru yolu ben php aşağıdaki deseni uygulamak gerekir:PHP
bunu doğru yolu nedirclass 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'));
}
...
}
.
P.S.
Bu amaçla call_user_func kullanıyordum ve özel sınıf üyelerini arayabileceğine inanıyorum ya da inanmıyordum, ancak geliştirme birkaç hafta sonra çalışmayı durdurduğunu gördüm. Kodumda bir hata mıydı, yoksa bana 'call_user_func' özel sınıf işlevlerini çağırabildiğini düşündüğüm bir şey miydi, bilmiyorum, ama şimdi basit, hızlı ve zarif bir yöntemi güvenle arıyorum özel sınıf üyesini diğer sınıftan çağırmak. Şu anda kapanışlara bakıyorum ama kapağın içinde '$ this' ile ilgili problemlerim var ...
'Kilitler (kılavuzda belirtildiği gibi) ve özel üyeleri desteklenmez $ this', özeldir çünkü onlar biri, kim onları özel olarak ilan etti, farklı bir sınıftan herhangi bir nesneden çağrılmasını istemiyorlar. Bu, "özel üye" tanımıdır;) – KingCrunch
Evet, özel üyeler özel oldukları için gizlidir :) Ancak, düğmelerinize "Hey düğmesinin" tıklandığınızı hayal edin, düğmeyi tıklattığınızda "ButtonClickedHandler" içindeki özel kodumu çalıştırın ' . Bu durumda düğmenin niçin cevap vereceğini anlamıyorum 'Ah, kodunuzu yürütmek istemiyorum, çünkü bu özel, herkese açık hale getirsin, sonra yapacağım ...' Nedeni neden özel kodumu yapmalıyım - public ... Umarım puan – Lu4
PHP değildir. Net. Fıstık ezmesi ve çikolatanın aksine. PHP, bu şeylerin içine adanmış olanlarla daha iyi tadamayacak. Ayrıca, muhtemelen sizden sonra gelen herkes, kodunuzu çıkarır ve tüm bunları aklı başında yeniden inşa eder. – DampeS8N