एक प्लगइन में उपयोग किए गए फ़ंक्शन को कैसे चित्रित किया जाए?


17

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

function foo() {
    echo 'bar';
}

मुझे पता है, _deprecate_function()लेकिन अपने प्लगइन के कोर से फ़ंक्शन को हटाने के लिए मुझे जो भी कदम उठाने चाहिए, वह एक उदाहरण के लिए आभारी होंगे।

Ref: https://developer.wordpress.org/reference/functions/_deprecated_function/


अच्छा सवाल है, लेकिन क्या यह आपके प्लगइन नाम स्थान का समय है? आप अभी भी अपने पदावनत समारोह से नए नाम स्थान को कॉल कर सकते हैं ...
branlmerritt

Namespacing एक ऐसा विकल्प है जिसका मैं पता लगाना चाहता हूं लेकिन यह तय नहीं किया गया है कि क्या मैं अभी तक PHP 5.2 के लिए समर्थन छोड़ता हूं।
henrywright

अगर php संस्करण बहुत कम है, लेकिन नामांकित स्थान को हटाए गए विकल्प को लोड करें अन्यथा आपको एक संक्रमण पथ दिया जा सकता है। आपका पदावनत संदेश तब हो सकता है "आपका होस्टिंग प्रदाता PHP 5.3+ ब्ला ब्ला आदि का समर्थन नहीं कर रहा है"
brilmerritt

जवाबों:


11

@Welcher द्वारा जवाब के अलावा:

कोर में कुछ अच्छे " कब्रिस्तान " उदाहरण हैं, जहां " कार्य मरने के लिए आते हैं "।

आप उन्हें प्रलेखन के संबंध में दिशानिर्देशों के रूप में उपयोग कर सकते हैं।

यहाँ इस तरह के permalink_link()तहत के लिए एक उदाहरण हैwp-includes/deprecated.php

/**
 * Print the permalink of the current post in the loop.
 *
 * @since 0.71
 * @deprecated 1.2.0 Use the_permalink()
 * @see the_permalink()
 */
function permalink_link() {
        _deprecated_function( __FUNCTION__, '1.2', 'the_permalink()' );
        the_permalink();
}

_deprecated_functionइनपुट तर्कों को स्पष्ट करने वाले फ़ंक्शन के लिए इनलाइन प्रलेखन यहां दिया गया है:

/**
 * Mark a function as deprecated and inform when it has been used.
 *
 * There is a hook deprecated_function_run that will be called that can be used
 * to get the backtrace up to what file and function called the deprecated
 * function.
 *
 * The current behavior is to trigger a user error if WP_DEBUG is true.
 *
 * This function is to be used in every function that is deprecated.
 *
 * @since 2.5.0
 * @access private
 *
 * @param string $function    The function that was called.
 * @param string $version     The version of WordPress that deprecated the function.
 * @param string $replacement Optional. The function that should have been called. 
 *                            Default null.
 */

1
इसके लिए धन्यवाद। मैंने कोर द्वारा उठाए गए दृष्टिकोण को देखने के लिए नहीं सोचा था! तो मैं मान रहा हूं कि ये कदम मुझे उठाने की जरूरत है? 1) मेरे समारोह से सभी मूल सामग्री को हटा दें 2) _deprecated_function()3 में एक कॉल जोड़ें) मेरे नए फ़ंक्शन में एक कॉल जोड़ें जो पुराने को बदल देता है
henrywright

1
यह एक दो तरफा समस्या की तरह लगता है - यहाँ चर्चा की गई है और नाम का टकराव संभव है। मैंने केवल प्रश्न के शीर्षक के अनुसार यहां पहले भाग को संबोधित किया है।
बीरगिरे

1
@MarkKaplun मैं मानता हूं कि 2 मुद्दे चल रहे हैं। सवाल यह था कि फ़ंक्शन को कैसे दर्शाया जाए और यही मेरा जवाब आधारित था। __Doing_it_wrong नोटिस उन डेवलपर्स के लिए है जो अपने विषयों आदि में इस पद्धति को कॉल कर रहे हैं ताकि उन्हें साइट को केवल व्हाट्सएप करने के बजाय एपीआई में परिवर्तन पर प्रतिक्रिया करने की अनुमति मिल सके। लॉग डिप्रेस्ड नोट एक महान देव प्लगइन है जो आपको मुख्य परिवर्तनों के साथ अद्यतित रखने की अनुमति देता है और इस मामले में भी मदद करेगा।
वेलकर

1
@MarkKaplun मैं आपकी बात देखता हूं। मैं यह तर्क देना चाहूंगा कि जब तक आइटम को एपीआई से नहीं हटाया जाता है तब तक डिप्रेसेशन का हिस्सा बैकवर्ड संगतता बनाए रखेगा। नोटिस का बिंदु (कोई भी तरीका जो इसे उत्पन्न करने के लिए उपयोग किया जाता है) डेवलपर्स को इस पद्धति का उपयोग करने के लिए सूचित करना है कि इसे हटा दिया जाएगा और तदनुसार कार्य करने के लिए उन्हें समय दिया जाएगा। किसी चीज़ को
चित्रित

2
@MarkKaplun मुझे यकीन नहीं है कि आप (या के लिए) के खिलाफ क्या बहस कर रहे हैं? सवाल यह था कि एक विधि को कैसे चित्रित किया जाए और यह इस तथ्य से स्पष्ट है कि ओपी कहता है कि "मेरा प्लगइन" जानता है कि किस पदावनति का मतलब है कि वह एक डेवलपर है। आप जिस काल्पनिक उपयोगकर्ता के बारे में बात कर रहे हैं, उसका इस विशिष्ट प्रश्न से कोई लेना-देना नहीं है। यदि आप लॉग में एक लाख नोटिस प्राप्त करने के बारे में चिंतित हैं, तो केवल WP_DEBUG सक्षम होने पर और आपके बिंदु पर, यदि गैर-डेवलपर्स द्वारा सक्षम नहीं किया जाएगा और उत्पादन में नहीं है, तो केवल सवाल के तरीके। मैं सम्मानपूर्वक सिर्फ एक कदम पर सहमत होने के लिए सहमत होने जा रहा हूँ :)
21

7

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

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

function badly_named() {

    __doing_it_wrong( 'badly_named', 'This method has been deprecated in favor of better_named_function' );

    /**
     * Call the better named method
     */
     better_named_function();
}

उम्मीद है की यह मदद करेगा!


इसके लिए धन्यवाद, लेकिन मैं सोच रहा हूं कि मुझे यह कॉपी करना चाहिए कि कोर कैसे करता है। उदाहरण के लिए @birgire द्वारा उत्तर पर एक नज़र डालें
henrywright

मुझे अच्छा लगता है :)
19

1

आप एक नया प्लगइन बनाते हैं और अपने उपयोगकर्ताओं को सलाह देते हैं कि वे इसे स्थानांतरित करें क्योंकि वर्तमान ईओएल है।

प्लगइन और थीम लेखकों के लिए सार्वजनिक एपीआई को बदलने से अधिक कष्टप्रद कुछ भी नहीं है और इसे "सिर्फ एक और छोटे उन्नयन" के रूप में मानने की कोशिश करें। साइटों को तोड़ने का कोई कारण नहीं है क्योंकि आपके उपयोगकर्ता वास्तव में इससे प्रभावित नहीं हो रहे हैं।


मेरे उपयोगकर्ता इससे पूरी तरह प्रभावित होंगे यदि किसी अन्य प्लगइन का ठीक उसी नाम के साथ एक फ़ंक्शन है (और नामस्थान का उपयोग नहीं कर रहा है)।
henrywright

नहीं, प्लगइन सक्रियण विफल हो जाएगा और वे आपको या अन्य प्लगइन के लेखक से शिकायत करेंगे। शून्य के बारे में कुल व्यवधान का समय। यदि उन्हें दोनों प्लगइन्स की आवश्यकता होती है तो नए में अपग्रेड करने के लिए साइट के कामकाज में कोई रुकावट नहीं होनी चाहिए। आप जो चाहते हैं, वह यह है कि आपके कुछ उपयोगकर्ता अपग्रेड करेंगे और पाएंगे कि कुछ कार्यक्षमता बिना किसी नोटिस के काम नहीं कर रही है। ठीक करने का समय? क्या आपको लगता है कि उनके पास बैकअप है और इसे ठीक कर सकते हैं?
मार्क कप्लून

एक बार जब आप एक एपीआई बना लेते हैं, तो आपको इसे हमेशा के लिए समर्थन देना होगा या कम से कम जब तक यह पूरी तरह से irelevant नहीं हो जाता है, उदाहरण के लिए वर्डप्रेस ने वास्तव में 3.4 के बाद से किसी भी अपग्रेड किए गए एपीआई को नहीं हटाया है, और सिर्फ एक नोटिस जोड़ने से आपका कोई भला नहीं होगा।
मार्क कप्लून

1
+1 क्योंकि मैं आपकी राय का सम्मान करता हूं और इस साइट के बारे में मुझे जो मजा आता है, वह है समस्याओं के विभिन्न दृष्टिकोण, दृष्टिकोण और समाधान।
बीरगेयर

1

मैं कुछ सुझाव दूंगा:

/**
 * @deprecated Please use good_function_name() instead
 * @since x.y.z Marked deprecated in favor of good_function_name()
 * @see good_function_name()
 */
function bad_function_name() {
    trigger_error(
        'The ' . __FUNCTION__ . ' function is deprecated. ' .
        'Please use good_function_name() instead.',
        defined( 'E_USER_DEPRECATED' ) ? E_USER_DEPRECATED : E_USER_WARNING
    );

    return good_function_name();
}

यह एक स्टैक ट्रेस के साथ लॉग में एक deprecation चेतावनी दिखाने का प्रभाव है। स्वाभाविक रूप से यह केवल तभी काम करेगा जब वर्डप्रेस में लॉगिंग सक्षम हो।

Ternary Operator वहां है क्योंकि E_USER_DEPRECATED स्थिरांक केवल PHP 5.3.0 में पेश किया गया था। पुराने संस्करणों में हम इसके बजाय एक साधारण उपयोगकर्ता चेतावनी पर वापस गिर सकते हैं।

त्रुटि स्थिरांक पर PHP मैनुअल से :

E_DEPRECATE रन-टाइम नोटिस। इसे कोड के बारे में चेतावनी प्राप्त करने में सक्षम करें जो भविष्य के संस्करणों में काम नहीं करेगा।

कारण मुझे _doing_it_wrong या __deprecated_function का उपयोग करना पसंद नहीं है, यह है कि ये फ़ंक्शन केवल वर्डप्रेस कोर के लिए अभिप्रेत हैं। उन कार्यों पर कोड संदर्भ से:

इस फ़ंक्शन की पहुंच निजी रूप से चिह्नित है। इसका मतलब यह है कि यह प्लगइन या थीम डेवलपर्स द्वारा उपयोग के लिए नहीं है, केवल अन्य मुख्य कार्यों में। इसे यहां पूर्णता के लिए सूचीबद्ध किया गया है।


1
यह पूरी तरह से वैध बिंदु है +1 - हम हालांकि यह देख सकते हैं कि Woocommerce जैसे प्लगइन्स दोनों फ़ंक्शन का उपयोग करते हैं । परवाह किए बिना।
बिरगीरे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.