2010-01-06 14 views
5

के लिए चिह्नित फ़ंक्शंस के उपयोग को ट्रैक करना इस धागे के बाद: How to handle functions deprecation in library? मैं बहिष्कृत फ़ंक्शन पर सभी कॉल ट्रैक करने का कोई तरीका ढूंढना चाहता हूं ताकि मैं सुनिश्चित कर सकूं कि फ़ंक्शन हटा दिए जाने से पहले मैं उन्हें बदल दूंगा। निम्नलिखित PHP विधियों को देखते हुएबहिष्करण

/* 
    @deprecated - just use getBar() 
*/ 
function getFoo(){ 
    return getBar(); 
} 

function getBar(){ 
    return "bar"; 
} 

मैं ऐसा करने की निम्न विधि के साथ आया और मैं प्रतिक्रिया की तलाश में हूं।

function getFoo(){ 
    try{ 
     throw new Exception("Deprecated function used"); 
    } catch(Exception $e){ 
     //Log the Exception with stack trace 
     .... 
     // return value as normal 
     return getBar(); 
    } 
} 

उत्तर

4

PHP के आंतरिक बहिष्कृत कार्यों के लिए, बस error_reporting पर E_STRICT जोड़ें।

उपयोगकर्ता के कार्यों के लिए बहिष्कृत कार्यों के बारे में नोटिस या चेतावनी उठाने के लिए, मैं सुझाव देता हूं कि @deprecated एनोटेशन जोड़ने के लिए समय लेने वाले डेवलपर ने भी E_USER_DEPRECATED चेतावनी को ट्रिगर किया है, उदा।

function getFoo(){ 
    trigger_error(__FUNCTION__ . 'is deprecated', E_USER_DEPRECATED); 
    return getBar(); 
} 

मुझे पता है अगर available QA tools के किसी भी स्वचालित रूप से अगर कोड पदावनत विधि कॉल शामिल पता लगा सकते हैं नहीं कर रहा हूँ। हालांकि वे आपकी सबसे अच्छी शर्त हैं।

यदि आप 100% कोड कवरेज के साथ टीडीडी का उपयोग कर रहे हैं तो आपको बहिष्कृत विधियों या कार्यों को हटाने के बारे में चिंतित होने की आवश्यकता नहीं है। आपके स्वचालित परीक्षण बस असफल हो जाएंगे और आपको पता चलेगा कि कहां देखना है।

+0

+1 :) –

+0

गॉर्डन, मुझे आपका समाधान पसंद है क्योंकि ऐसा लगता है कि मैं अपवादों का दुरुपयोग नहीं कर रहा हूं। एक नकारात्मक पक्ष यह है कि यह प्रोग्रामर की पेशकश नहीं करता है जहां अपमानजनक कॉल किया गया था, जैसे स्टैक ट्रेस करता है, लेकिन बस कॉल किया गया था। – Scott

+0

स्कॉट: त्रुटि संदेश को समायोजित करने के लिए किसी भी जादू स्थिरांक को जोड़ने के लिए स्वतंत्र महसूस करें: http://us.php.net/manual/en/language.constants.predefined.php या 'debug_backtrace से डेटा शामिल करें () '- ऊपर दिया गया उदाहरण जानबूझकर पठनीयता के लिए छोटा रखा गया है। – Gordon

1

पदावनत समारोह वास्तव में बुलाया जा रहा है पर निर्भर खतरनाक है - क्या आप वाकई कुछ छूट न जाए बनाने के लिए 100% कोड कवरेज होगा। धीरे-धीरे सभी कॉल को बहिष्कृत कार्यों में ढूंढने और उन्हें एक-एक करके बदलने का अधिकार है, लेकिन पूर्ण संक्रमण के लिए पर्याप्त नहीं है। वहाँ के रूप में PHP के लिए आसपास कोई अच्छा रिफैक्टरिंग उपकरण है कि मैं के बारे में पता कर रहे हैं

मैं File>Search in Files

लगता है कि आपके IDE में, अपने सबसे अच्छे शर्त है।

बाद विचार: शायद PhpXRef समाधान है।

+0

पेक्का, अक्सर यह दृष्टिकोण लिया जाता है। हालांकि, यह दृष्टिकोण उन फ़ाइलों को खोजने में विफल रहता है जो फ़ाइलों में खोज के बाद बनाए गए थे। (कहें कि एक अलग डेवलपर दस्तावेज़ीकरण नहीं पढ़ता है)। उपरोक्त विधि को डेवलपर से 'संपर्क' करने का एक और तरीका प्रदान करने के लिए डिज़ाइन किया गया था, फिर भी डेवलपर पर अपने त्रुटि लॉग पढ़ने पर निर्भर है। – Scott

+0

दोनों तरीकों का संयोजन शायद सबसे अच्छा है। E12STRICT पर चलने के सुसमाचार को फैलाने के लिए –

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