Tools für das Refactoring von PHP-Code [geschlossen]

74

Gibt es Tools, die das Refactoring von PHP-Code unterstützen (Umbenennen von Variablen, Extrahieren von Methoden, Suchen von Methodenreferenzen, ...)? Vielen Dank.


quelle
3
Ich denke, es ist wirklich schwierig, zuverlässiges Refactoring in einer dynamischen Sprache zu haben ...
Andrei Rînea
2
Ja, aber ich vermute, dass das eigentliche Problem darin besteht, dass keine gute Infrastruktur (Analyse, statische Analyse, Transformation) verwendet wird, auf der ein Tool erstellt werden kann. Bis die Fundamente solide sind, macht es kaum Sinn, ein Haus zu bauen.
Ira Baxter
Fundamente werden stärker. Siehe stackoverflow.com/a/21400723/120163
Ira Baxter
1
Ende 2017 habe ich die Arbeit am AST-Refactoring-Tool Rector angestarrt
Tomáš Votruba

Antworten:

14

Scisr ist ein einfaches, eigenständiges Refactoring-Tool für PHP.

Ich weiß, dass dies eine alte Frage ist, aber da es sich um eine der besten Übersichten zu PHP-Refactoring-Tools handelt, dachte ich, ich würde mein neues Projekt zur Liste hinzufügen.

Viele meiner Entwurfsziele sind auf die Unzulänglichkeiten anderer hier genannter Elemente zurückzuführen - sie sind an bestimmte IDEs gebunden oder versuchen, Ihre Testpraktiken zu diktieren, oder erfordern eine ganze Reihe von manueller Arbeit. Ich hoffe, eine insgesamt bessere Erfahrung in Scisr zu schaffen. Es ist einfach zu installieren und auszuführen. Es versucht klug zu sein, aber nicht zu klug. Es erledigt die Aufgaben, die ich gefunden habe, um sich am besten für die Automatisierung zu eignen. Genießen!

Ian Greenleaf Young
quelle
Ich habe gerade Ihre Projekthomepage gelesen. Ich stimme der Methode hinter dem Projekt voll und ganz zu und hoffe, dass es gut läuft. (Ich entwickle auf einem PC und muss leider warten, bis ich zu Ubuntu wechsle, bevor ich es verwenden kann.)
JW.
Froh, dass Sie es mögen! Wenn Sie Lust auf ein bisschen Hacking haben, sollte es nicht zu schwierig sein, in einer Windows-Umgebung zum Laufen zu kommen. Ich vermute, dass die Dateipfade das einzige wirkliche Problem sind, und ein Großteil davon wird durch den Code erledigt, den ich von CodeSniffer geschrieben habe, von dem ich glaube, dass er Windows unterstützt.
Ian Greenleaf Young
Link ist kaputt - das scheint es zu sein: github.com/iangreenleaf/Scisr
Walter Mundt
@ Walter-Mundt - danke. Ich habe vor einiger Zeit meinen Github-Benutzernamen geändert und ihn gebrochen. Jetzt behoben.
Ian Greenleaf Young
12

rephactor ist ein automatisches Refactoring-Tool. Es ist immer noch etwas unvollständig, hat aber einige grundlegende Umgestaltungen.

Andernfalls ist eine gute Testsuite wirklich das beste Tool für das Refactoring, das Sie haben können.

troelskn
quelle
15
Dies verwendet reguläre Ausdrücke, um Code zu finden. Es ist einfach nicht sicher.
Ira Baxter
5
Automatische Refactorings gibt es nie. Sie sollten vorher und nachher Tests durchführen lassen, um den Vorgang zu überprüfen. Rephactor integriert tatsächlich den Testfluss vorher / nachher.
troelskn
7
@ troelskn: Niemals? Warum sollte ein Refactoring-Tool so implementiert werden, dass Ihr Programm beschädigt wird? Das bedeutet nur, dass Sie ein wirklich schlechtes Refactoring-Tool haben. Es ist technisch unkompliziert, die meisten Refactorings korrekt durchzuführen . Es ist eine Menge technischer Schweiß, und die meisten Leute wollen nicht dafür bezahlen, und das erklärt, warum das Zeug, das da draußen ist, im Allgemeinen ziemlich schlecht ist. Aber das bedeutet nicht , Refactoring - Tools haben , gebrochen werden.
Ira Baxter
Bei jeder Änderung einer Codebasis besteht die Gefahr, dass Fehler auftreten.
Troelskn
6
@troelskn: Im Allgemeinen nicht. Ja, bei dynamischen Sprachen, da die Bindung der Namensimplementierung zur Laufzeit erfolgt. Statische Sprachen wie Haskell oder C ++, bei denen die Bindung der Namensimplementierung zur Kompilierungszeit erfolgt, / bevor / der Code ausgeführt wird, können ein garantiertes Refactoring bereitstellen erfolgreich. Dies ist der Grund, warum dynamische Sprachen im Allgemeinen scheiße sind.
Jesse
8

PHPStorm von Jetbrains unterstützt Refactoring unter http://www.jetbrains.com/phpstorm/index.html

Das Umbenennungs-Refactoring funktioniert für Dateien, Funktionen, Konstanten, Klassen, Eigenschaften, Methoden, Parameter sowie lokale und globale Variablen. Es stehen auch folgende Refactorings zur Verfügung:

  • Variable einführen
  • Konstante einführen
  • Feld einführen
  • Inline-Variable

und sie bieten auch eine kostenlose Lizenz für Open Source-Projekte an!

Cedric
quelle
2
In der Tat unterstützt diese IDE das Refactoring. Leider hat es einige Usability-Probleme. Ich hoffe, dass sie bald behoben sind. Wenn Sie beispielsweise in einer Auswahl suchen / ersetzen, springt das Editorfenster auf "Alle ersetzen". Im Allgemeinen mag ich es und benutze es, obwohl ich Aptana sofort wählen würde, wenn es das Umbenennen unterstützen würde.
Argyle
drinnen ist es fantastisch, aber die Benutzerfreundlichkeit ist im Vergleich zu Eclipse / Netbeans wirklich schlecht. Zum Beispiel BASIC-Funktionen wie Suchen / Ersetzen und Team-Tools.
gaRex
6

Die NetBeans-IDE verfügt über einige Refactoring-Funktionen, scheint jedoch nicht immer zu funktionieren. Ich benutze jedoch 6.1 mit frühem PHP-Zugang. Ich erwarte, dass 6.5 mit PHP bessere Refactoring-Funktionen bietet.

Ross
quelle
Ich verwende Netbeans 6.5 und Sie können beispielsweise Methoden umbenennen, aber es werden keine Verweise in anderen Dateien korrigiert, auch nicht in Dateien im selben Projekt, was es größtenteils unbrauchbar macht.
Cletus
Ich benutze Netbeans 6.7, es funktioniert irgendwie ...
Ronald Conco
Ich verwende 6.9.1 und denke, dass die Refactoring-Funktionen im PHP-Fall immer noch auf das Suchen / Ersetzen von Zeichenfolgen beschränkt sind. Für eine dynamische Sprache wären die Refactoring-Funktionen immer begrenzt. Sie können immer noch nicht mit der rechten Maustaste auf einen Klassennamen klicken und ihn in allen Kontexten in etwas anderes umbenennen.
rjha94
Die Verwendung von Netbeans 7.2 (/ 3) Refactoring funktioniert meistens wie ein Zauber. Umbenennen von Klassen / Methoden / Variablen in verschiedenen Kontexten.
Juwens
5

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

Der PHP Refactoring Browser ist eine neuere Version des im guten Buch beschriebenen Refactoring Browsers . Es könnte Hilfe gebrauchen (bitte beitragen), aber es unterstützt mehrere gängige Refactorings.

Zum Zeitpunkt des Schreibens unterstützt der Browser:

  • Methode extrahieren
  • Lokale Variable umbenennen
  • Lokale in Instanzvariable konvertieren
  • Klasse und Namespaces umbenennen
  • Nutzungsanweisungen optimieren (PHP-spezifisch)

Es gibt ein SublimeText-Plugin, das tatsächlich funktioniert. Wenn ich mir neuen Code anschaue, werde ich einige dieser einfachen Refactorings anwenden, um die Codebasis in den Griff zu bekommen.

Frambot
quelle
3

Mein Lieblings-Refactoring-Tool ist immer noch das gute alte EditPlus in Kombination mit der superschnellen Dateisuche von Total Commander . (Hinweis: Alt + F7) Ich stimme der Antwort von Mark Biek voll und ganz zu, dass Sie die volle Kontrolle darüber haben möchten, was wo und wann ersetzt wird.

Wann immer ich ein Refactoring durchführen muss, erstelle ich eine Liste in totaler Reihenfolge der Dateien, die ich ändern möchte, indem ich entweder mit der eingebauten Funktion suche oder sie einfach auswähle und sie dann alle auf EditPlus ziehe

Editplus kann die aktuelle Datei, eine Auswahl oder alle geöffneten Dateien mit normalem Textabgleich, Regex-Abgleich oder mehrzeiligem Abgleich durchsuchen und ersetzen . Es gibt dir wirklich die volle Kontrolle :)

Für das Code-Refactoring ist außerdem der Macro Recorder von EditPlus nützlich (Strg + Q, um die Aufnahme von Makro 1-9 zu starten, und Alt + 1-9, um ein Makro abzuspielen).

Sobald Sie den Dreh raus haben, wissen Sie, dass Sie einfach nach einer Variablen suchen können, Strg + Umschalt + (Home || Ende || Pfeiltasten) durch Ihren Code, löschen, kopieren / einfügen und alle Tastatur-Assistenten verwenden können, um zu mögen, Konvertieren Sie beispielsweise eine CSV-Datei innerhalb von 30 Sekunden in eine Reihe von SQL-Abfragen.

SchizoDuckie
quelle
12
Dies ist kein Refactoring. Es ist nur die Bearbeitung.
Ira Baxter
2
Refactoring ist nur eine automatisierte Bearbeitung.
Quodlibetor
7
@quotlibetor: Das Schreiben von Beethovens Fünfter ist nur eine Bearbeitung nach Ihrer Definition. Der Unterschied zwischen Refactoring (Verschieben genau definierter Codeblöcke auf semantisch legale Weise) ist qualitativ so unterschiedlich wie das Verschieben beliebiger Textblöcke mit unbekannter Bedeutung, dass die Unterscheidung zwischen den beiden Begriffen nicht gelöscht werden kann.
Ira Baxter
3

Ich persönlich bevorzuge PHPEclipse IDE als mein primäres Entwicklungswerkzeug. Aber ich vermisse wirklich das grundlegende Refactoring "überall im Projekt ersetzen".

Aber ein sehr einfacher Befehl find / sed kann es leicht lösen:

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

Wenn Sie dies also intelligent verwenden, können Sie Referenzen finden, umbenennen, entfernen und jede Art von Manipulationen mit dem Quellcode vornehmen.

Übrigens: Sie können sich nicht einmal an all diese Parameter und Attribute erinnern - geben Sie sie einfach einmal ein und rufen Sie sie dann über die umgekehrte Suche auf .

Hoffe das hilft.

Nikita Fedyashev
quelle
2
Achten Sie mit dem Befehl sed darauf: Wenn Sie einen Variablennamen umgestalten, möchten Sie häufig das Refatory bei einem bestimmten Wettbewerb einschränken , beispielsweise bei einer bestimmten Funktion. Sie können die Variable $ data viel Zeit in einer Klasse haben, aber Sie möchten ihren Namen möglicherweise nur in der Funktion _dataRead () ändern. Die Möglichkeit, dies zu tun, macht den Unterschied zwischen einem einfachen sed-Befehl und einem IDE-Plugin aus.
Emilio AL
3

Zend Studio kann ein bisschen umgestalten .....

matthy
quelle
2

Vielleicht liegt es nur daran, dass ich mich immer noch mit den Konzepten des Refactorings vertraut mache, aber ich mag es nicht, wenn ein Tool dies für mich erledigt.

Ich ziehe es immer noch vor, die meisten Umgestaltungen manuell durchzuführen, da ich dadurch langsamer werden und wirklich darüber nachdenken muss, was ich bewege und warum.

Mark Biek
quelle
3
Refactoring sollte Sie nicht verlangsamen. Refactoring sollte ein schneller und sicherer Schritt in der Entwicklung sein. Wenn Refactoring etwas ist, dem Sie zusätzliche Aufmerksamkeit schenken müssen, werden Sie es in den meisten Fällen nur aus Komfortgründen überspringen.
viam0Zah
Ich stimme Mark zu. Außerdem - ich verstehe nicht das Hauptverkaufsargument des Refactorings: "Dies bringt den Code in ein Format, das für jeden Programmierer aus allen Teilen der Welt akzeptabel und verständlich ist." Aber wir sind alle verschieden. Was für mich einfach ist, kann für andere schwierig sein, und wenn Sie meinen Code für andere umgestalten, fällt es mir möglicherweise nicht leicht, ihm zu folgen. Also, was ist der Punkt?
Stann
Ich bin nicht der Meinung, dass Refactoring "den Code in ein Format bringen soll, das für jeden Programmierer akzeptabel und verständlich ist". Das einfachste Beispiel ist das Umbenennen einer Methode. Wenn ein Methodenname schlecht ist, können Sie ihn leicht verbessern, da Sie sicher sind, dass Ihre Änderungen niemanden betreffen. Wenn Sie ein Glas für andere Benutzer bereitstellen, würden Sie öffentliche Methoden natürlich nicht umbenennen, sondern eine neue erstellen und die alte ablehnen. In diesem Fall können Sie den Refactor dennoch so umgestalten, dass Ihr interner Code die besser benannte Funktion aufruft.
Juan Mendes
Zwar sollte das Refactoring sicher sein, da Sie die Struktur und nicht die Funktionalität ändern, aber das manuelle Refactoring verlangsamt Sie definitiv, da Sie sicherstellen möchten, dass Sie keine Teile übersehen haben. Genau wie wenn Sie einen Aufsatz von Chicago nach Oxford konvertieren würden (immer eine gute Idee). Sie ändern nicht die Semantik des Textes, sondern die Syntax. Beim Kämmen stellen Sie möglicherweise fest, dass (a) der Refactor nicht erforderlich war oder (b) andere Dinge, die Sie bereinigen müssen. Ich denke, es ist eine gute Übung.
Paul d'Aoust
2

Ich habe gelesen, dass die IDE Delphi für PHP Refactoring-Funktionen in der Version mit dem Codenamen Crocodile haben wird, die für Anfang 2009 geplant ist. Weitere Informationen finden Sie unter diesem Link .

Shunyata Kharg
quelle
2

Probieren Sie die Web-IDE von IntelliJ aus. Es befindet sich derzeit in der EAP-Phase (Alpha / Beta), aber ich verwende es mehrere Monate lang als einzige IDE, sodass es stabil und sehr gut ist.

Nishi
quelle
Ich benutze auch PHPStorm, es hat eine sehr grundlegende Refactoring-Unterstützung: Umbenennen / Verschieben, Variable einführen, Konstante einführen, Konstante einführen, Inline, sicheres Löschen.
Juan Mendes
1

Es gibt keine Refactoring-Unterstützung für PHP in Netbeans 6.5, die jedoch in zukünftigen Versionen verfügbar sein wird.

Das PDT Eclipse Plugin unterstützt auch kein Refactoring.

Aptana unterstützt auch kein Refactoring. Ich konnte auch nicht dazu kommen, dass die Definition funktioniert.

Am Ende verwende ich derzeit Suchen und Ersetzen. Auch ich möchte zumindest die Funktionsunterstützung umbenennen.

grom
quelle
1

Soweit ich weiß, sind die einzigen IDEs, die eine signifikante Refactoring-Unterstützung für PHP bieten, Zend Studio von den Herstellern von PHP und das Eclipse PHP-Plugin. Obwohl die Funktionen sehr einfach sind. Nichts, von dem ich weiß, hat die Eigenschaften von Produkten wie Resharper für C # usw.

orj
quelle
0

PDT für Eclipse unterstützt einige grundlegende Umgestaltungen (die ich kenne). Sie können Klassen umbenennen und automatisch umbenennen lassen, wenn auf sie verwiesen wird. Ich denke, Sie können sogar Dateien verschieben und ihre Include- / Require-Referenzen ändern.

Brian Warshaw
quelle
Zu der Zeit, als ich das schrieb, glaube ich, dass es für PDT zutraf.
Brian Warshaw
Nein, derzeit nicht. Dies ist die Hauptschwäche von PDT :( Aber in einigen der nächsten Versionen wird es.
gaRex