Strumenti per il refactoring del codice PHP


68

Esistono strumenti che supportano il refactoring del codice PHP (ridenominazione di variabili, estrazione di metodi, ricerca di riferimenti al metodo, ...)? Grazie.

+3

Immagino che sia davvero difficile avere un refactoring affidabile in un linguaggio dinamico ... 10 dic. 102010-12-10 09:40:36

+2

Sì, lo è, ma sospetto che il vero problema qui sia l'assenza di uso di buone infrastrutture (analisi, analisi statica, trasformazione) su cui costruire uno strumento. Fino a quando le basi non sono solide, non c'è quasi nessun punto nel tentativo di costruire una casa. 28 ago. 122012-08-28 02:37:55

  0

Le basi si rafforzano. Vedi http://stackoverflow.com/a/21400723/120163 28 gen. 142014-01-28 10:31:18

  0

Alla fine del 2017 ho iniziato a lavorare sullo strumento di refactoring AST Rector: https://github.com/RectorPHP 16 ott. 172017-10-16 16:40:20

0

PDT per Eclipse supporta alcuni refactoring di base (che io conosca). Puoi rinominare le classi e farle rinominare automaticamente quando vengono referenziate, e penso che puoi anche spostare i file e avere i loro riferimenti include/require cambiati.

  0

Nel momento in cui l'ho scritto, credo fosse vero di PDT. 16 mag. 122012-05-16 14:22:52

  0

No, non al momento. Questo è il punto debole principale di PDT :(Ma in alcune delle prossime versioni lo sarà. 22 lug. 142014-07-22 03:36:15


3

Forse è solo perché mi sto ancora familiarizzando con i concetti di refactoring ma non mi piace che uno strumento lo faccia per me.

Preferisco comunque eseguire la maggior parte del refactoring manualmente perché mi costringe a rallentare ea pensare veramente a cosa mi sto muovendo e perché.

+3

Il refactoring non dovrebbe rallentare. Il refactoring dovrebbe essere un passo rapido e sicuro nello sviluppo. Se il refactoring ritiene che sia necessario prestare maggiore attenzione, salterà la maggior parte dei casi solo per comodità 23 nov. 102010-11-23 11:21:46

  0

Sono d'accordo con Mark. Inoltre - Non ho il principale punto di vendita del refactoring: "Questo porta il codice in un formato che è accettabile e comprensibile da qualsiasi programmatore, da qualsiasi parte del globo. "Ma siamo tutti diversi. Quello che per me è facile potrebbe essere difficile per qualcun altro e se rifattori il mio codice per qualcun altro, potrebbe non essere facile per me da seguire, quindi qual è il punto? 07 gen. 112011-01-07 19:12:29

  0

Non sono d'accordo refactoring è pensato per "portare il codice in un formato che sia accettabile e comprensibile da qualsiasi programmatore". L'esempio più semplice è la ridenominazione di un metodo, se il nome di un metodo è sbagliato, puoi facilmente migliorarlo, sicuro che il tuo le modifiche non influenzeranno nessun altro. Ovviamente, se stai offrendo un barattolo per un altro da usare, non cambierai i nomi dei metodi pubblici, ne creerai uno nuovo e deprecerai quello vecchio. Ma in quel caso, puoi ancora refactoring in modo che il tuo codice interno chiami la funzione con il nome migliore. 16 mar. 112011-03-16 23:08:30

  0

Anche se è vero che il refactoring dovrebbe essere sicuro, perché stai cambiando struttura e non funzionalità, il refactoring manuale ti rallenta sicuramente, perché vuoi essere certo di non aver perso nessun bit. Proprio come se si stesse convertendo un tema da Chicago a Oxford (sempre una buona idea). Non stai cambiando la semantica del testo, ma stai modificando la sintassi, e nel processo di pettinatura potresti scoprire (a) che il refactoring non era necessario, o (b) altre cose che devi pulire. Penso che sia un buon esercizio. 17 feb. 162016-02-17 17:09:28


5

L'IDE NetBeans ha alcune capacità di refactoring ma non sembra funzionare sempre. Sto comunque usando 6.1 con accesso PHP iniziale. Mi aspetto che 6.5 abbia migliori capacità di refactoring con PHP.

  0

Uso Netbeans 6.5 e puoi fare cose come rinominare i metodi ma non risolve i riferimenti in altri file, anche nei file nello stesso progetto, il che lo rende per lo più inutile. 25 dic. 082008-12-25 14:49:54

  0

Sto usando Netbeans 6.7, funziona un po '... 29 ott. 092009-10-29 17:20:13

  0

Sto usando 6.9.1 e penso che le capacità di refactoring siano ancora limitate a trovare/sostituire le stringhe nel caso PHP. Per un linguaggio dinamico, le capacità di refactoring sarebbero sempre limitate. Non è ancora possibile fare cose come fare clic con il tasto destro del mouse sul nome di una classe e rinominarlo in qualcos'altro in tutti i contesti. 08 apr. 112011-04-08 08:58:50

  0

Utilizzando Netbeans 7.2 (/ 3) il refactoring funziona come un incantesimo, il più delle volte. Rinominare classi/metodi/variabili in diversi contesti. 30 mar. 132013-03-30 18:39:11


1

Non esiste alcun supporto per il refactoring per PHP in Netbeans 6.5, tuttavia è in arrivo nella versione futura.

Il plug-in eclissi PDT non supporta il refactoring.

Aptana non supporta il refactoring. Nemmeno io riuscivo a far funzionare la definizione goto.

Finisco per cercare e sostituire al momento. Anch'io vorrei rinominare almeno il supporto della funzione.


11

rephactor è uno strumento di refactoring automatico. È ancora un po 'incompleto, ma ha alcuni refactoring di base.

Altrimenti, una buona suite di test è davvero lo strumento migliore per il refactoring, si può avere.

+14

THIS utilizza regex per trovare il codice. Semplicemente non è sicuro. 04 set. 092009-09-04 05:13:37

+5

I refactoring automatici non lo sono mai. Dovresti fare dei test prima e dopo per verificare l'operazione. Rephactor in realtà integra il flusso di test prima/dopo. 05 set. 092009-09-05 13:39:47

+6

@troelskn: mai? Perché uno strumento di refactoring dovrebbe essere implementato in modo tale da danneggiare il tuo programma? Questo significa che hai uno strumento di refactoring davvero pessimo. È * tecnicamente * semplice fare la maggior parte dei refactoring * correttamente *. È un sacco di sudore ingegneristico, e la maggior parte delle persone non vuole pagare per questo, e questo spiega perché le cose che sono là fuori sono generalmente piuttosto brutte. Ma ciò non significa che gli strumenti di refactoring * debbano * essere spezzati. 01 set. 102010-09-01 03:37:31

  0

Qualsiasi modifica a una base di codice comporta il rischio di introdurre errori. 01 set. 102010-09-01 10:18:34

+5

@troelskn: non in generale. Con i linguaggi dinamici, sì, l'associazione nome-implementazione viene eseguita in runtime. Lingue statiche, come Haskell o C++, dove l'associazione nome-implementazione viene eseguita in fase di compilazione,/prima/il codice viene eseguito, può fornire il refactoring che è garantito riuscito. Questo è il motivo per cui le lingue dinamiche, in generale, fanno schifo. 28 ott. 102010-10-28 06:33:50

  0

@Jesse: Questa è l'unica cosa che non mi piace di JS, i tipi sciolti che non consentono un facile refactoring, lo adoro altrimenti. @troelskn: Non so come qualcuno possa pensare che uno strumento di refactoring basato su RegEx possa funzionare correttamente. Intellij Idea garantisce che finché Intellij ha accesso al tuo intero codice, tutti i refactoring sono sicuri e non cambieranno il comportamento del codice. http://www.jetbrains.com/idea/features/refactoring.html 16 mar. 112011-03-16 23:00:44

  0

@jesse Questa è una proprietà del linguaggio, non lo strumento di refactoring. 26 mar. 112011-03-26 14:19:21

  0

@JuanMendes #jetbrains #advertising #detected 22 lug. 142014-07-22 03:33:12

  0

@gaRex so? È sicuramente correlato alla domanda 22 lug. 142014-07-22 03:41:12

  0

Concordo pienamente con il commento sui test qui, recentemente scritto un post sul refactoring sul PHP - incentrato pesantemente sull'ottenere il treno di rilascio ordinato e sui grandi test in atto prima di cambiare realmente codice: https://icyapril.com /programming/php/2016/12/24/refactoring-legacy-php.html#testing 30 dic. 162016-12-30 05:21:52


2

Il mio strumento di refactoring preferito è il buon vecchio EditPlus in combinazione con la ricerca di file super veloce di Total Commander. (Suggerimento: Alt + F7) Sono totalmente d'accordo con la risposta di Mark Biek che si desidera avere il pieno controllo su ciò che viene sostituito dove e quando.

Ogni volta che devo eseguire un refactoring, creo un elenco in un comandante totale dei file che desidero modificare eseguendo una ricerca con la funzione incorporata o semplicemente selezionandoli, quindi li trascino tutti in EditPlus

Editplus può cercare & sostituire con il file corrente, una selezione o tutti i file utilizzando normale corrispondenza del testo, la corrispondenza regex o corrispondenza multilinea aperto. Ti dà davvero il pieno controllo :)

Inoltre, ciò che è utile per il refactoring del codice è il Macro Recorder di EditPlus (Ctrl + Q per avviare la macro di registrazione 1-9 e Alt + 1-9 per riprodurre una macro).

Una volta capito, puoi cercare una variabile, ctrl + maiusc + (home || end || tasti freccia) tramite il tuo codice, elimina, copia/incolla e usa quella tastiera ad esempio, le magie devono convertire un file CSV in un gruppo di query SQL entro 30 secondi.

+11

Questo non è refactoring. È solo un montaggio. Il refactoring 04 set. 092009-09-04 05:11:20

+2

è solo una modifica automatica. 11 mar. 102010-03-11 02:03:08

+6

@quotlibetor: Scrivere il quinto di Beethoven è solo un editing in base alla tua definizione. La differenza tra il refactoring (spostamento di blocchi di codice ben definiti in modi semanticamente legali) è così qualitativamente diversa rispetto allo spostamento di frammenti arbitrari di testo con significato sconosciuto che la distinzione tra i due termini non può essere cancellata. 01 set. 102010-09-01 03:40:21


0

Per quanto ne so, gli unici IDE che hanno un supporto Refactoring significativo per PHP sono Zend Studio dai creatori di PHP e del plugin PHP Eclipse. Anche se le funzionalità sono molto semplici. Nulla di ciò che conosco ha le caratteristiche di prodotti come Resharper per C# ecc.


1

Ho letto che l'IDE Delphi per PHP avrà funzionalità di refactoring nella versione in codice Crocodile, prevista per l'inizio del 2009. Vedi this link per i dettagli.


3

Personalmente preferisco PHPEclipse IDE come strumento di sviluppo principale. Ma mi manca davvero la base del "rimpiazzare ovunque nel progetto".

Ma molto semplice trovare/sed comando può risolvere facilmente:

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

Quindi, utilizzando questo intelligente è possibile trovare riferimenti, rinominare, rimuovere e fare ogni sorta di manipolazioni con il codice sorgente.

BTW: non riesci nemmeno a ricordare tutti questi parametri e attributi: digita solo una volta e poi chiama tramite reverse-i-search.

Spero che questo aiuti.

+2

Prestare attenzione con il comando sed: quando si rifatta una variabile nome vuoi spesso _limitare il refatory ad un certo contest_, come ad esempio una certa funzione. Puoi avere la variabile $ data un sacco di tempo in una classe, ma potresti voler cambiare il suo nome solo nella funzione _dataRead(). La capacità di fare ciò determina la differenza tra un semplice comando sed e un plugin IDE. 05 ott. 112011-10-05 11:09:25


2

Zend Studio può refactoring un po '.....


13

Scisr è un semplice, strumento di refactoring standalone per PHP.

So che questa è una vecchia domanda, ma poiché è uno dei migliori riepiloghi degli strumenti di refactoring di PHP, ho pensato di aggiungere il mio nuovo progetto all'elenco.

Un sacco di miei obiettivi di progettazione a molle dalle inadeguatezze di altre voci di cui qui - sono legati in alcuni IDE, o cercano di dettare le vostre pratiche di verifica, o richiedere un intero gruppo di lavoro manuale a memoria. Spero di creare un'esperienza complessiva migliore in Scisr. È semplice da installare ed eseguire. Cerca di essere intelligente, ma non lo è anche intelligente. Fa i compiti che ho trovato per prestarsi meglio all'automazione. Godere!

  0

Ho appena letto la home page del tuo progetto. Sono totalmente d'accordo con il metodo alla base del progetto e spero che vada bene. (Sto sviluppando su un PC, quindi sfortunatamente dovrò aspettare che mi trasferisca su Ubuntu prima di poterlo usare) 14 ott. 102010-10-14 06:32:48

  0

Felice che ti piaccia! Se hai voglia di fare un po 'di hacking, non dovrebbe essere troppo difficile per essere eseguito su un ambiente Windows. La mia ipotesi sarebbe che i percorsi dei file sarebbero l'unico vero problema, e molto di questo è gestito dal codice che ho criptato da CodeSniffer, che credo supporti Windows. 15 ott. 102010-10-15 19:09:30

  0

Il collegamento è interrotto - sembra essere questo: https://github.com/iangreenleaf/Scisr 17 ago. 112011-08-17 18:45:32

  0

@ Walter-Mundt - grazie. Ho cambiato il mio nome utente github un po 'indietro e l'ho rotto. Risolto ora. 21 ago. 112011-08-21 07:09:38


1

Prova Web IDE da IntelliJ. Ora è in fase EAP (alpha/beta), ma lo uso come unico IDE per diversi mesi, quindi è stabile e molto buono.

  0

Uso anche PHPStorm, ha un supporto per il refactoring molto semplice: rinomina/sposta, introduce variabile, introduce costante, introduce un'eliminazione costante, in linea, sicura. 16 mar. 112011-03-16 23:11:31


1

Appena pubblicato un articolo sulla prossima versione di Delphi per PHP in cui è possibile vedere il motore di refactoring in azione.

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


8

PhpStorm da JetBrains supporto refactoring, http://www.jetbrains.com/phpstorm/index.html

Il refactoring Rinomina funziona per i file, le funzioni, le costanti, le classi, le proprietà, i metodi, i parametri e le variabili locali e globali. Anche seguenti refactoring sono disponibili:

  • Introdurre variabile
  • Introdurre costante
  • Introdurre campo
  • Inline variabile

e offrono qualche licenza libera per aprire progetto di origine, come pure!

+2

In effetti questo IDE supporta il refactoring. Sfortunatamente, ha alcuni problemi di usabilità. Spero che vengano risolti presto. Ad esempio, quando si esegue una ricerca/sostituzione in una selezione, la finestra dell'editor salta dappertutto su "Sostituisci tutto". In generale mi piace e lo uso anche se sceglierei Aptana in un battito cardiaco se supportasse la ridenominazione. 30 set. 112011-09-30 00:01:57

  0

al suo interno fantastico, ma l'usabilità fa davvero schifo paragonando a eclipse/netbeans. Ad esempio le funzioni BASIC come ricerca/sostituzione e strumenti di squadra. 22 lug. 142014-07-22 03:34:53


4

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

PHP Refactoring Browser è una più recente assumere la Browser refactoring descritto nel the good book. Potrebbe servire un po 'di aiuto (si prega di contribuire), ma ha il supporto per diversi refactoring comuni.

al momento di scrivere, il browser supporta:

  • estratto Metodo
  • Rinominare locale variabile
  • Convert locale di grado variabile
  • Rinomina classe e spazi dei nomi
  • Ottimizzare Usa Dichiarazioni (Specifiche PHP)

C'è un plugin SublimeText che funziona davvero. Quando guarderò il nuovo codice, applicherò alcuni di questi semplici refactoring per aiutarmi a gestire il codebase.