कार्यों में वैश्विक कार्यों के बजाय कक्षाओं का उपयोग करना


11

कई विषयों में मैंने देखा है (जिसमें ट्वेंटीलेवेन भी शामिल है) और उदाहरणों में मैंने ऑनलाइन पाया है, जब functions.phpकिसी थीम के लिए फ़ाइल का निर्माण करते समय सभी कार्यक्षमता को वैश्विक दायरे में घोषित किया जाता है। स्पष्ट करने के लिए, यह वह है जो एक विशिष्ट कार्य फ़ाइल जैसा दिखता है:

function my_theme_do_foo() { // ... }

function my_theme_do_bar() { // ... }

add_action( 'foo_hook', 'my_theme_do_foo' );

यह मुझे प्रतीत होता है कि अगर एक वर्ग का उपयोग किया जाता है तो चीजें थोड़ी बेहतर हो सकती हैं:

class MyTheme {
    function do_foo() { // ... }
    function do_bar() { // ... }
}

$my_theme = new MyTheme();

add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) );

दूसरे दृष्टिकोण के लाभ (मेरी नम आंखों में):

  • छोटे समारोह के नाम
  • उदाहरण के चर तक पहुँच (सबसे बड़ा लाभ IMO)
  • कोई वैश्विक कार्य नहीं

नुकसान:

  • क्लासनाम अभी भी संघर्ष का कारण बन सकता है
  • एक बच्चे के विषय के साथ "अनुकूलित" करने के लिए स्पष्ट नहीं है (एक मूल वर्ग का विस्तार करना होगा)
  • अधिकांश विषयों ने इसे इस तरह से नहीं किया है, इसलिए आप प्रवृत्ति को बढ़ा रहे हैं

मैं शायद कुछ चीजों की अनदेखी कर रहा हूं, लेकिन मैं सोच रहा हूं कि ओओपी दृष्टिकोण क्यों नहीं लिया जाए? यह मुझे थोड़ा "क्लीनर" लगता है, अगर कुछ भी। शायद मुझसे गलती हुई है?

मैं वर्डप्रेस थीम के विकास में काफी नया हूं, इसलिए मुझे क्षमा करें अगर यह WP समुदाय में सामान्य ज्ञान है :)। बस यह जानने की कोशिश कर रहे हैं कि चीजें किस तरह से हैं।


- आप Kovshenin से विषयों की जांच कर सकते wordpress.org/extend/themes/profile/kovshenin वह functions.php में OOP दृष्टिकोण का उपयोग करता
Mamaduka

जवाबों:


9

एन्कैप्सुलेशन के लिए एक वर्ग का उपयोग करना प्लगइन्स के लिए कई डेवलपर्स द्वारा एक बहुत ही सामान्य दृष्टिकोण है। मैं ऐसा करता हूं, और मुझे यह साफ लगता है। लेकिन प्लगइन्स के लिए। विषय-वस्तु प्रकृति द्वारा अधिक प्रक्रियात्मक हैं।

हम इसे डिफ़ॉल्ट वर्डप्रेस थीम के लिए नहीं करते हैं क्योंकि यह प्रवेश के लिए बाधा को बढ़ाता है। कार्य काफी सरल हैं। कक्षाओं से बंधे कार्यों को हटाना मुश्किल हो सकता है (और विशिष्ट परिस्थितियों में संभावित रूप से छोटी गाड़ी)।

साथ ही, डिफ़ॉल्ट थीम में कई फ़ंक्शन प्लग करने योग्य होते हैं। एक वर्ग का विस्तार और तरीकों की जगह सिर्फ समारोह को परिभाषित करने की तुलना में अधिक जटिल है। और जब कोड के दो अलग-अलग पहलू विभिन्न कार्यों को प्रतिस्थापित कर सकते हैं, तो आप गतिशील रूप से कक्षाओं का विस्तार नहीं कर सकते। जैसा कि आपने बताया, एक मूल वर्ग का विस्तार करने की आवश्यकता निश्चित रूप से एक नुकसान है।

मैंने ट्वेंटी इलेवन के थीम विकल्प कोड को एक वर्ग बनाने पर विचार किया, लेकिन इसके आसपास कभी नहीं मिला। उस तरह का अलग, प्लगइन जैसी कार्यक्षमता एनकैप्सुलेशन के लिए एक अच्छे उम्मीदवार की तरह लगता है।


उत्तर के लिए धन्यवाद, Nacin। मैंने कक्षाओं के साथ "अनहूकिंग" क्रियाओं में कठिनाई के बारे में नहीं सोचा था। इनकैप्सुलेशन के विकल्पों के बारे में - हम एक ही बात सोच रहे हैं: github.com/jestro/struts
एंडी एडम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.