2008-08-21 18 views
68

क्या कोई उपकरण है जो PHP कोड को पुन: सक्रिय करने का समर्थन करता है (वैरिएबल का नाम बदलना, विधियों को निकालने, विधि संदर्भ ढूंढना, ...)? धन्यवाद।PHP कोड रीफैक्टरिंग के लिए उपकरण

+3

मुझे लगता है कि एक गतिशील भाषा में विश्वसनीय रिफैक्टरिंग करना वास्तव में मुश्किल है ... –

+2

हां, यह है, लेकिन मुझे संदेह है कि असली समस्या यहां बुनियादी ढांचे (पार्सिंग, स्थिर विश्लेषण, परिवर्तन) के उपयोग की अनुपस्थिति है। एक उपकरण बनाने के लिए। जब तक नींव ठोस न हो, तब तक घर बनाने का प्रयास करने में कोई बात नहीं है। –

+0

नींव मजबूत हो रही है। देखें http://stackoverflow.com/a/21400723/120163 –

उत्तर

0

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

+0

जब मैंने इसे लिखा था, मुझे विश्वास है कि यह था पीडीटी के सच। –

+0

नहीं, यह वर्तमान में नहीं है। यह पीडीटी का मुख्य कमजोर है :(लेकिन अगले कुछ रिलीज में यह – gaRex

3

शायद यह इसलिए है क्योंकि मैं अभी भी रिफैक्टरिंग की अवधारणाओं के साथ सहज महसूस कर रहा हूं लेकिन मुझे यह पसंद नहीं है कि यह उपकरण मेरे लिए करे।

मैं अभी भी मैन्युअल रूप से सबसे अधिक रिफैक्टरिंग करना पसंद करता हूं क्योंकि यह मुझे धीमा करने के लिए मजबूर करता है और वास्तव में सोचता है कि मैं किस चीज के आसपास घूम रहा हूं और क्यों।

+3

रिफैक्टरिंग आपको धीमा नहीं करना चाहिए। रिफैक्टरिंग विकास में त्वरित और आत्मविश्वासपूर्ण कदम होना चाहिए। अगर रिफैक्टरिंग कुछ महसूस करती है तो आपको अतिरिक्त ध्यान देना होगा, आप यह केवल आराम के लिए ज्यादातर मामलों को छोड़ देगा। –

+0

मैं मार्क के साथ सहमत हूं। इसके अलावा - मुझे रिफैक्टरिंग का मुख्य बिक्री बिंदु नहीं मिलता है: "यह कोड को ऐसे प्रारूप में लाता है जो किसी भी प्रोग्रामर द्वारा स्वीकार्य और समझा जा सकता है दुनिया का हिस्सा। "लेकिन हम सभी अलग हैं। मेरे लिए क्या आसान है किसी और के लिए मुश्किल हो सकता है और यदि आप किसी और के लिए अपना कोड दोबारा दोहराते हैं - मेरे लिए यह आसान नहीं हो सकता है। तो बात क्या है? – Stann

+0

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

5

नेटबीन्स आईडीई में कुछ रिफैक्टरिंग क्षमता है लेकिन यह हमेशा काम नहीं करता है। हालांकि मैं प्रारंभिक PHP पहुंच के साथ 6.1 का उपयोग कर रहा हूं। मैं उम्मीद करता हूं कि 6.5 के साथ PHP के साथ बेहतर रिफैक्टरिंग क्षमताएं होंगी।

+0

मैं नेटबीन्स 6.5 का उपयोग करता हूं और आप चीजों का नाम बदलने जैसी चीजें कर सकते हैं लेकिन यह अन्य फाइलों में संदर्भों को ठीक नहीं करता है, यहां तक ​​कि एक ही प्रोजेक्ट में फाइलों में, जो इसे अधिक बेकार बनाता है। – cletus

+0

मैं नेटबीन्स 6.7 का उपयोग कर रहा हूं, यह काम करता है ... –

+0

मैं 6.9.1 का उपयोग कर रहा हूं और मुझे लगता है कि रिफैक्टरिंग क्षमता अभी भी PHP मामले में स्ट्रिंग ढूंढ/प्रतिस्थापित करने तक सीमित है। एक गतिशील भाषा के लिए रिफैक्टरिंग क्षमताओं हमेशा सीमित रहेंगे। आप अभी भी क्लास नाम पर राइट क्लिक करने जैसी चीजें नहीं कर सकते हैं और सभी संदर्भों में इसे किसी अन्य चीज़ का नाम बदल सकते हैं। – rjha94

1

नेटबीन्स 6.5 में PHP के लिए कोई रिफैक्टरिंग समर्थन नहीं है, हालांकि यह भविष्य के संस्करण में आ रहा है।

पीडीटी ग्रहण प्लगइन भी रिफैक्टरिंग का समर्थन नहीं करता है।

Aptana या तो refactoring का समर्थन नहीं करता है। मैं या तो काम करने के लिए गोटो परिभाषा नहीं मिल सका।

मैं खोज का उपयोग करके अंत में बदलता हूं और वर्तमान में प्रतिस्थापित करता हूं। मैं भी कम से कम फ़ंक्शन समर्थन का नाम बदलना चाहता हूं।

11

rephactor एक स्वचालित रिफैक्टरिंग टूल है। यह अभी भी थोड़ा अपूर्ण है, लेकिन इसमें कुछ बुनियादी रिफैक्टरिंग हैं।

अन्यथा, एक अच्छा परीक्षण सूट वास्तव में रिफैक्टरिंग के लिए सबसे अच्छा उपकरण है, आप कर सकते हैं।

+14

यह कोड खोजने के लिए regexes का उपयोग करता है। यह बस सुरक्षित नहीं है। –

+5

स्वत: रिफैक्टरिंग कभी नहीं हैं। ऑपरेशन को सत्यापित करने के पहले आपको पहले और बाद में परीक्षण करना चाहिए। रेफैक्टर वास्तव में पहले/बाद में परीक्षण के प्रवाह को एकीकृत करता है। – troelskn

+6

@troelskn: कभी नहीं? एक रिफैक्टरिंग टूल को ऐसे तरीके से क्यों लागू किया जाना चाहिए जो आपके प्रोग्राम को नुकसान पहुंचाए? इसका मतलब है कि आपके पास वास्तव में खराब रिफैक्टरिंग टूल है। यह * तकनीकी रूप से * सबसे refactorings * सही * करने के लिए सीधा है। यह बहुत सारे इंजीनियरिंग पसीने है, और अधिकांश लोग इसके लिए भुगतान नहीं करना चाहते हैं, और यह बताता है कि वहां मौजूद सामान आम तौर पर क्यों खराब है। लेकिन इसका मतलब यह नहीं है कि टूल्स टूटा * टूल्स टूटा हुआ है। –

2

अभी भी मेरा पसंदीदा रिफैक्टरिंग टूल Total Commander की सुपर फास्ट फ़ाइल खोज के साथ संयोजन में अच्छा ol 'EditPlus है। (संकेत: Alt + F7) मैं मार्क बीएके के जवाब से पूरी तरह से सहमत हूं कि आप कहां और कब बदलते हैं उस पर पूर्ण नियंत्रण रखना चाहते हैं।

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

EditPlus & वर्तमान फ़ाइल, एक चयन या सभी खोला फ़ाइलों सामान्य पाठ मिलान, रेगुलर एक्सप्रेशन मिलान या बहु मिलान का उपयोग कर के माध्यम से की जगह खोज सकते हैं। यह वास्तव में आपको पूर्ण नियंत्रण देता है :)

इसके अलावा, कोड रीफैक्टरिंग के लिए आसान में क्या आता है, एडिटप्लस के मैक्रो रिकॉर्डर (मैक्रो 1-9 रिकॉर्ड करने के लिए Ctrl + Q और मैक्रो प्लेबैक करने के लिए Alt + 1-9)।

एक बार जब आप इसे लटका लेंगे, तो आप जानते हैं कि आप अपने कोड के माध्यम से केवल एक चर, ctrl + shift + (home || end || तीर कुंजी) खोज सकते हैं, हटा सकते हैं, कॉपी/पेस्ट कर सकते हैं और उस कीबोर्ड का उपयोग कर सकते हैं उदाहरण के लिए, जादूगर को सीएसवी फ़ाइल को 30 सेकंड के भीतर एसक्यूएल प्रश्नों के समूह में परिवर्तित करना पसंद है।

+11

यह रीफैक्टरिंग नहीं कर रहा है। यह सिर्फ संपादन है। –

+2

रिफैक्टरिंग केवल स्वचालित संपादन है। – quodlibetor

+6

@quotlibetor: लेखन बीथोवेन का पांचवां सिर्फ आपकी परिभाषा से संपादन कर रहा है। रिफैक्टरिंग (अर्थात् कानूनी तरीकों से अच्छी तरह से परिभाषित कोड भागों को स्थानांतरित करने) के बीच का अंतर अज्ञात अर्थ के साथ पाठ के मनमाना भाग को स्थानांतरित करने से गुणात्मक रूप से अलग है कि दोनों शर्तों के बीच भेद मिटाया नहीं जा सकता है। –

0

जहां तक ​​मुझे पता है, PHP के लिए कोई महत्वपूर्ण रिफैक्टरिंग समर्थन केवल एक ही आईडीई है जो PHP और ग्रहण PHP प्लगइन के निर्माताओं से Zend Studio है। हालांकि विशेषताएं बहुत बुनियादी हैं। मुझे कुछ भी नहीं पता है जिसमें उत्पादों की विशेषताएं हैं जैसे Resharper for C# आदि।

1

मैंने पढ़ा है कि PHP के लिए आईडीई डेल्फी को रिलीज कोडनयुक्त मगरमच्छ में रिफैक्टरिंग क्षमताओं की आवश्यकता होगी, जो 200 9 की शुरुआत में निर्धारित है। विवरण के लिए this link देखें।

+0

http://blogs.embarcadero.com/joseleon/2010/06/09/delphi-for-php-next-release-early-preview-15-refactoring/ –

3

मैं व्यक्तिगत रूप से PHPEclipse आईडीई को अपने प्राथमिक विकास उपकरण के रूप में पसंद करता हूं। लेकिन मैं वास्तव में बुनियादी परियोजना "परियोजना में हर जगह जगह" याद करता हूं।

लेकिन बहुत सरल लगता है/sed आदेश आसानी से इसे हल कर सकते हैं:

find . -type f -name "*Controller.php" -print0 \ 
     | xargs -0 sed -i 's/string1/string2/g' 

तो, यह का उपयोग कर समझदारी से आप संदर्भ पा सकते हैं का नाम बदलने, हटाने और स्रोत कोड के साथ जोड़तोड़ किसी भी प्रकार का हो।

बीटीडब्ल्यू: आप इन सभी पैरामीटर और विशेषताओं को भी याद नहीं कर सकते हैं - बस इसे एक बार टाइप करें और फिर इसे reverse-i-search के माध्यम से कॉल करें।

उम्मीद है कि इससे मदद मिलती है।

+2

sed कमांड के साथ ध्यान दें: जब आप एक चर नाम आप अक्सर एक निश्चित प्रतियोगिता_ पर refatory को _limit करना चाहते हैं, उदाहरण के लिए एक निश्चित समारोह। आपके पास कक्षा में परिवर्तनीय $ डेटा बहुत समय हो सकता है, लेकिन आप केवल अपना नाम बदलकर funcion _dataRead() में बदल सकते हैं। ऐसा करने की क्षमता एक साधारण sed कमांड और एक आईडीई प्लगइन के बीच अंतर सेट करता है। –

2

Zend स्टूडियो थोड़ा refactor कर सकते हैं .....

13

Scisr PHP के लिए एक सरल, स्टैंडअलोन रिफैक्टरिंग उपकरण है।

मुझे पता है कि यह एक पुराना सवाल है, लेकिन चूंकि यह PHP रिफैक्टरिंग टूल के सर्वोत्तम रैंडों में से एक है, मैंने सोचा कि मैं अपनी नई परियोजना सूची में जोड़ूंगा।

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

+0

मैंने अभी आपके प्रोजेक्ट होम पेज को पढ़ा है। मैं पूरी तरह से परियोजना के पीछे की विधि से सहमत हूं और आशा करता हूं कि यह अच्छा होगा। (मैं एक पीसी पर विकसित हूं इसलिए दुर्भाग्यवश मुझे तब तक इंतजार करना पड़ेगा जब तक कि मैं इसका उपयोग करने से पहले उबंटू में नहीं जाऊं) –

+0

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

+0

लिंक टूटा हुआ है - ऐसा लगता है: https://github.com/iangreenleaf/Scisr –

1

इंटेलिजे से वेब आईडीई आज़माएं। यह अब ईएपी चरण (अल्फा/बीटा) में है, लेकिन मैं इसे कई महीनों के लिए एकमात्र आईडीई के रूप में उपयोग करता हूं, इसलिए यह स्थिर और बहुत अच्छा है।

+0

मैं पीएचपीएसटॉर्म का भी उपयोग करता हूं, इसमें बहुत बुनियादी रिफैक्टरिंग समर्थन है: नाम बदलें/स्थानांतरित करें, परिवर्तनीय परिचय दें, निरंतर परिचय दें, निरंतर, इनलाइन, सुरक्षित हटाएं। –

1

बस PHP के लिए डेल्फी की अगली रिलीज के बारे में एक लेख प्रकाशित किया जहां आप कार्रवाई में रिफैक्टरिंग इंजन देख सकते हैं। जेटब्रेन्स समर्थन रिफैक्टरिंग से

http://blogs.embarcadero.com/joseleon/2010/06/09/delphi-for-php-next-release-early-preview-15-refactoring/

8

PHPStorm, http://www.jetbrains.com/phpstorm/index.html

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

  • परिचय चर
  • परिचय लगातार
  • फील्ड
  • इनलाइन चर

परिचय दें और वे स्रोत परियोजना को खोलने के लिए और साथ ही कुछ मुक्त लाइसेंस प्रदान करते हैं!

+2

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

+0

इसके अंदर भयानक है, लेकिन प्रयोज्यता वास्तव में ग्रहण/नेटबीन की तुलना में बेकार है। उदाहरण के लिए बेसिक विशेषताएं जैसे खोज/प्रतिस्थापन और टीम टूल्स। – gaRex

4

https://github.com/QafooLabs/php-refactoring-browser

पीएचपी पुनर्रचना ब्राउज़र अधिक नया पुनर्रचना ब्राउज़र the good book में वर्णित पर ले जाती है। यह कुछ मदद (कृपया योगदान) का उपयोग कर सकता है, लेकिन इसमें कई आम रिफैक्टरिंग के लिए समर्थन है।

लेखन के रूप में, ब्राउज़र का समर्थन करता है:

  • निकालें विधि
  • का नाम बदलें स्थानीय चर
  • चर
  • नाम बदलें क्लास और नेमस्पेस
  • अनुकूलन उपयोग वक्तव्य उदाहरण में कनवर्ट स्थानीय (PHP-specific)

एक SublimeText प्लगइन है जो वास्तव में काम करता है। जब मैं नया कोड देख रहा हूं तो मैं कोडबेज पर हैंडल प्राप्त करने में मेरी सहायता के लिए इन सरल रिफैक्टरिंग में से कुछ लागू करूंगा।

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