2010-12-07 15 views
6

मुझे आश्चर्य है कि एक PHP अनुप्रयोग
में हुक को संभालने का सबसे अच्छा तरीका क्या है - इसलिए मैं कोड के मुख्य निकाय को संशोधित किए बिना कस्टम या 'प्लग इन' कार्यक्षमता डाल सकता हूं।PHP हुक करने का सबसे अच्छा तरीका

मुझे पता है कि वर्डप्रेस में कुछ ऐसा है। इस प्रकार यह वास्तव में ठीक कुछ करने के लिए है:

if (file_exists('file_before'){ include('file_before'); } 

print 'hello'; 

if (file_exists('file_after'){ include('file_after'); } 
+2

आपको अपेक्षित 'हुक' पर अधिक जानकारी चाहिए? उपर्युक्त ** तर्क ** पूरी तरह से काम करता है – ajreal

+8

वह कोड पूरी तरह से काम नहीं करता है, उसके पास दो बंद होने वाले ब्रैकेट्स – Ashley

+1

गायब हैं, बस आपको कुछ सुझाव देने के लिए छद्म कोड था कि मैं – CJD

उत्तर

17

जब मैं हुक की बात करता हूं तो मैं आमतौर पर चीजें कैसे करता हूं, एक हुकलोडर क्लास बनाता है जो दो प्रकार के हुक, प्री और पोस्ट स्टोर करेगा। क्योंकि PHP एक सिंगल थ्रेडेड दुभाषिया है, ऐसी कोई चीज नहीं होगी।

$Hooks = new HookLoader(); 

$Hook->Run("PRE","database_connect"); 
$Database->Connect(); 
$Hook->Run("POST","database_connect"); 

हुक निर्देशिका में प्रत्येक हुक तो जैसे नाम दिया जाना चाहिए:

name_pre_database_connect.hook.php 

हुक फ़ाइलों तो इस प्रारूप में होना होगा:

{name}_{type}_{event}.hook.php 

यह

इस उदाहरण लें आपको असीमित हुक बनाने की अनुमति देगा।

अधिमानतः मैं हुक वर्ग सार और स्थिर बनाना होगा, इस तुम सिर्फ वास्तविक वस्तु के भीतर हुक कॉल चला सकते हैं इसलिए नए पुस्तकालयों को जोड़ने जब तक एकीकृत किया जाएगा के रूप में वे Hook::run("type","event");

+0

द्वारा कॉल करें, धन्यवाद, अच्छा समाधान – CJD

+0

आपका स्वागत है, आशा है कि सब ठीक हो जाएंगे। – RobertPitt

0

मीडियाविकि उनके तरीकों में हुक को परिभाषित करने के लिए अपने स्वयं के तंत्र है, और कार्यों को पंजीकृत करने के तरीके निष्पादन की एक भी बिंदु के लिए निष्पादित किया जाना है ...

http://www.mediawiki.org/wiki/Hooks (शुरू करने के लिए एक अच्छी जगह हो सकती है)

5

है का उपयोग नहीं क्यों "Observer Pattern " इसके लिए? आप अपने शरीर में एक ऑब्जेक्ट जोड़ सकते हैं और संलग्न वर्गीकृत होल्ड को क्रियाओं को ट्रिगर कर सकते हैं। यदि आप इसे परिशोधित करना चाहते हैं, तो आप प्रत्येक पर्यवेक्षक ऑब्जेक्ट के अंदर एक विशिष्ट विधि बना सकते हैं जो निष्पादन के चरण को परिभाषित करता है। यह पहले अधिक प्रोग्रामिंग होगा, लेकिन आपकी कक्षाओं में अधिक कार्यक्षमता को जोड़ने के लिए एक बहुत ही साफ इंटरफेस देता है।

एक ठोस परीक्षा के लिए, यह IBM dev article (बीटीडब्ल्यू पूरी तरह से पढ़ने योग्य है) आपको इस पैटर्न का एक अच्छा प्रभाव देना चाहिए।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^