नहीं, आप सीधे नहीं, बल्कि हुक के माध्यम से क्लास को 'इनिशियलाइज़' कर सकते हैं या उसे तत्काल शुरू नहीं कर सकते। कुछ अतिरिक्त कोड की हमेशा आवश्यकता होती है (और यह ऐसा करने में सक्षम होने के लिए एक वांछनीय बात नहीं है, क्योंकि आप अपने लिए कीड़े का एक कैन खोल रहे हैं।
यहाँ यह करने का एक बेहतर तरीका है:
class MyClass {
function __construct() {
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
function getStuffDone() {
// .. This is where stuff gets done ..
}
}
$var = new MyClass();
निश्चित रूप से एक सामान्य वर्ग के लिए इसे और भी सरल बनाने के लिए एक इंटरफ़ेस वर्ग बना सकता है:
class IGetStuffDone {
function IGetStuffDone(){
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
public abstract function getStuffDone();
}
ध्यान दें कि एक इंटरफ़ेस के रूप में, आप सीधे इस प्रकार का ऑब्जेक्ट नहीं बना सकते हैं, लेकिन आप एक सब-क्लास बना सकते हैं, जिससे आप कह सकते हैं:
class CDoingThings extends IGetStuffDone {
function getStuffDone(){
// doing things
}
}
$var = new CDoingThings();
जो तब स्वचालित रूप से सभी हुक जोड़ देगा, आपको बस यह परिभाषित करने की आवश्यकता है कि वास्तव में उपवर्ग में क्या किया जा रहा है और फिर इसे बनाएं!
कंस्ट्रक्टर्स पर
मैं एक हुक फ़ंक्शन के रूप में एक निर्माता नहीं जोड़ूंगा, यह खराब अभ्यास है, और ओटी को बहुत सारे असामान्य घटनाओं का नेतृत्व कर सकता है। अधिकांश भाषाओं में भी एक कंस्ट्रक्टर उस वस्तु को लौटाता है जिसे इंस्टेंट किया जा रहा है, इसलिए यदि आपके हुक को किसी फ़िल्टर की तरह कुछ वापस करना है, तो वह फ़िल्टर किए गए वैरिएबल को वैसा नहीं लौटाएगा जैसा आप चाहते हैं, लेकिन इसके बजाय वह क्लास ऑब्जेक्ट लौटाएगा।
एक निर्माता या विध्वंसक को बुलाना बहुत, बहुत, बहुत बुरा प्रोग्रामिंग अभ्यास है, कोई फर्क नहीं पड़ता कि आप किस भाषा में हैं और कभी भी नहीं किया जाना चाहिए ।
कन्स्ट्रक्टर्स को वस्तुओं का निर्माण करना चाहिए, उन्हें उपयोग के लिए तैयार करना, वास्तविक काम के लिए नहीं। ऑब्जेक्ट द्वारा किया जाने वाला कार्य एक अलग फ़ंक्शन में होना चाहिए।
स्टैटिक क्लास के तरीके, और तुरंत / शुरू में इसकी जरूरत नहीं
यदि आपकी कक्षा विधि एक स्थिर वर्ग विधि है, तो आप $this
नीचे दिखाए गए के बजाय उद्धरणों में कक्षा का नाम पास कर सकते हैं:
class MyClass {
public static function getStuffDone() {
// .. This is where stuff gets done ..
}
}
add_action( 'admin_init', array('MyClass','getStuffDone' ) );
क्लोजर और पीएचपी 5.3
अफसोस की बात है कि आप नई क्लास बनाने वाली लाइन से बच नहीं सकते। इसे लंघन करने के लिए केवल अन्य समाधान में बॉयलर प्लेट कोड शामिल होगा जिसमें अभी भी वह रेखा है, और इसके लिए PHP 5.3+ की आवश्यकता होगी:
add_action('admin_init',function(){
$var = new MyClass();
$var->getStuffDone();
});
किस बिंदु पर आप कक्षा को छोड़ सकते हैं, और बस एक फ़ंक्शन का उपयोग कर सकते हैं:
add_action('admin_init',function(){
// do stuff
});
लेकिन ध्यान रखें कि आपने अब गुमनाम फ़ंक्शंस के दर्शक को पेश किया है। उपरोक्त कार्रवाई का उपयोग करने का कोई तरीका नहीं है remove_action
, और यह उन डेवलपर्स के लिए बहुत दर्द पैदा कर सकता है जिन्हें अन्य लोगों के कोड के साथ काम करना पड़ता है।
Ampersands पर
आप इस तरह की क्रियाओं को देख सकते हैं:
array( &$this, 'getStuffDone' );
यह बुरा है । &
PHP 4 में वापस जोड़ा गया था जब वस्तुओं को मूल्यों के रूप में पारित किया गया था, न कि संदर्भ के रूप में। PHP 4 एक दशक से अधिक पुराना है, और बहुत लंबे समय में वर्डप्रेस द्वारा समर्थित नहीं किया गया है।
नहीं है कोई कारण नहीं है का उपयोग करने के &this
लिए जब हुक और फिल्टर जोड़ने, और संदर्भ में कोई समस्या का कारण होगा दूर करने, और यहां तक कि पीएचपी के भविष्य के संस्करणों के साथ संगतता में सुधार हो सकता
इसके बजाय इसका उपयोग करें:
array( $this, 'getStuffDone' );