में प्रतिनिधियों या कॉलबैक करने का सही तरीका मैं php में निम्नलिखित पैटर्न लागू करने की आवश्यकता:पीएचपी
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'));
}
...
}
क्या ऐसा करने के लिए सही तरीका है।
पीएस
मैं उस उद्देश्य के लिए call_user_func का उपयोग कर रहा था और मानता हूं कि यह निजी वर्ग के सदस्यों को कॉल करने में सक्षम था, लेकिन विकास के कुछ सप्ताह बाद मुझे पता चला कि यह काम करना बंद कर दिया है। क्या यह मेरे कोड में एक बग था या यह कुछ और था जो मुझे लगता है कि 'call_user_func' कॉल निजी वर्ग के कार्यों को कॉल करने में सक्षम है, मुझे नहीं पता, लेकिन अब मैं सुरक्षित रूप से एक सरल, तेज़ और सुरुचिपूर्ण विधि की तलाश में हूं किसी के निजी वर्ग के सदस्य को दूसरे वर्ग से बुलाओ। मैं अभी बंद करने के लिए देख रहा हूं, लेकिन बंद होने के अंदर '$ this' के साथ समस्याएं हैं ...
'$ this' क्लोजर (मैनुअल में उल्लेख किया) और निजी सदस्यों में समर्थित नहीं है, निजी हैं क्योंकि वे एक है, जो उन्हें निजी के रूप में घोषित किया, न कि उन्हें किसी भी वर्ग से किसी भी वस्तु से बुलाया जाना चाहिए। यह "निजी सदस्य" की परिभाषा है;) – KingCrunch
हां, निजी सदस्य निजी हैं क्योंकि वे निजी हैं :) लेकिन कल्पना करें कि आप अपना बटन 'हे बटन' बता रहे हैं, "बटनक्लिड हैंडलर" में अपना निजी कोड निष्पादित करें जब आप ' । इस मामले में मुझे नहीं लगता कि बटन का जवाब क्यों देना चाहिए 'ओह, मैं आपका कोड निष्पादित नहीं करना चाहता, क्योंकि यह निजी है, इसे सार्वजनिक बनाएं, फिर मैं करूँगा ...' लेकिन या तो मुझे कोई नहीं दिखाई देता कारण मुझे अपना निजी कोड क्यों बनाना चाहिए - सार्वजनिक ... आशा है कि आपको अंक – Lu4
PHP प्राप्त नहीं है। नेट। मूंगफली का मक्खन और चॉकलेट के विपरीत। PHP इन चीजों के साथ बेहतर स्वाद नहीं लेगा। इसके अलावा, जो भी आपके बाद आता है वह शायद आपके कोड को टॉस कर देगा और इसे सभी तरह से पुनर्निर्माण करेगा। – DampeS8N