2008-08-21 50 views
68

¿Hay alguna herramienta que soporte la refactorización del código PHP (renombrar variables, extraer métodos, encontrar referencias de métodos, ...)? Gracias.Herramientas para refactorizar códigos PHP

+3

Supongo que es realmente difícil tener una refactorización confiable en un lenguaje dinámico ... –

+2

Sí, lo es, pero sospecho que el verdadero problema aquí es la ausencia de uso de una buena infraestructura (análisis sintáctico, transformación) sobre la cual para construir una herramienta. Hasta que los cimientos sean sólidos, apenas tiene sentido intentar construir una casa. –

+0

Fundaciones cada vez más fuertes. Ver http://stackoverflow.com/a/21400723/120163 –

Respuesta

0

PDT para Eclipse admite algunas refactorizaciones básicas (que yo sepa). Puedes cambiar el nombre de las clases y hacer que cambien de nombre automáticamente cuando se les haga referencia, y creo que incluso puedes mover archivos y cambiar sus referencias de inclusión/requerimiento.

+0

En el momento en que escribí esto, creo que fue verdad de PDT. –

+0

No, no lo hace actualmente. Esta es la principal debilidad del PDT :(Pero en algunos de los próximos lanzamientos lo hará. – gaRex

3

Tal vez sea solo porque aún me siento cómodo con los conceptos de refactorización, pero no me gusta tener una herramienta que lo haga por mí.

Todavía prefiero hacer la mayoría de las refacciones manualmente porque me obliga a reducir la velocidad y realmente pensar en lo que estoy moviendo y por qué.

+3

La refactoración no debería ralentizar. La refactorización debe ser un paso rápido y seguro en el desarrollo. Si la refacturación siente algo a lo que necesita prestar más atención, usted saltará la mayoría de los casos solo por comodidad. –

+0

Estoy de acuerdo con Mark. Además, no obtengo el principal argumento de venta de refactorización: "Esto lleva el código a un formato que sea aceptable y comprensible para cualquier programador, desde cualquier parte del globo. "Pero todos somos diferentes. Lo que es fácil para mí puede ser difícil para otra persona y si refactorizas mi código para otra persona, puede que no sea fácil para mí seguirlo. Entonces, ¿qué sentido tiene? – Stann

+0

No estoy de acuerdo con eso La refactorización está destinada a "llevar el código a un formato que sea aceptable y comprensible para cualquier programador". El ejemplo más simple es cambiar el nombre de un método; si el nombre de un método es incorrecto, puede mejorarlo fácilmente, confiando en que su los cambios no afectarán a nadie más. Obviamente, si está entregando un jar para que otros lo usen, no cambiaría el nombre de los métodos públicos, crearía uno nuevo y desaprobaría el anterior. Pero en ese caso, aún podría refactorizarse para que su código interno llame a la función mejor nombrada. –

5

El NetBeans IDE tiene alguna capacidad de refactorización, pero no siempre parece funcionar. Sin embargo, estoy usando 6.1 con acceso temprano a PHP. Espero que 6.5 tenga una mejor capacidad de refactorización con PHP.

+0

Utilizo Netbeans 6.5 y puede hacer cosas como cambiar el nombre de métodos pero no arregla referencias en otros archivos, incluso en archivos en el mismo proyecto, lo que lo hace casi inútil. – cletus

+0

Estoy usando Netbeans 6.7, funciona un poco ... –

+0

Estoy usando 6.9.1 y creo que las capacidades de refactorización aún están limitadas a la búsqueda/reemplazo de cadenas en el caso de PHP. Para un lenguaje dinámico, las capacidades de refactorización siempre serían limitadas. Todavía no puede hacer cosas como hacer clic derecho en un nombre de clase y cambiarle el nombre a algo más en todos los contextos. – rjha94

1

No existe soporte de refactorización para PHP en Netbeans 6.5, aunque viene en una versión futura.

El complemento PDT eclipse tampoco es compatible con la refactorización.

Aptana no es compatible con la refacturación tampoco. No pude hacer que la definición de ir a trabajar tampoco.

Termino usando la búsqueda y reemplazo actualmente. Yo también me gustaría al menos la función de cambio de nombre compatible.

11

rephactor es una herramienta de refactorización automática. Todavía es un poco incompleto, pero tiene algunas refactorizaciones básicas.

De lo contrario, un buen banco de pruebas es realmente la mejor herramienta para refactorizar, puede tener.

+14

Esto usa expresiones regulares para encontrar el código. Simplemente no es seguro. –

+5

Las refactorizaciones automáticas nunca lo son. Debe realizar pruebas antes y después para verificar la operación. Rephactor en realidad integra el flujo de pruebas antes/después. – troelskn

+6

@troelskn: ¿Nunca? ¿Por qué debería implementarse una herramienta de refactorización de una manera que dañe su programa? Eso solo significa que tienes una herramienta de refactorización realmente mala. Es * técnicamente * sencillo hacer la mayoría de las refactorizaciones * correctamente *. Es mucho sudor de ingeniería, y la mayoría de la gente no quiere pagar por ello, y eso explica por qué las cosas que están por ahí en general son bastante malas. Pero eso no significa que las herramientas de refactorización * tengan * que se rompan. –

2

Todavía mi herramienta de refactorización favorita es buena ol 'EditPlus en combinación con la búsqueda de archivos súper rápida de Total Commander. (Sugerencia: Alt + F7) Estoy totalmente de acuerdo con la respuesta de Mark Biek de que desea tener control total sobre qué se reemplaza dónde y cuándo.

Cada vez que tengo que hacer una refactorización, creo una lista en el comandante total de los archivos que quiero alterar ya sea buscando con la función incorporada o simplemente seleccionándolos, y luego los arrastro a EditPlus

EditPlus puede buscar a través & reemplazar el archivo actual, una selección o todos los archivos utilizando coincidencia de texto normal, coincidencia de expresiones regulares o coincidencia de varias líneas abiertas. Realmente le da control completo :)

Además, lo que resulta útil para la refactorización de códigos es la Grabadora de macros de EditPlus (Ctrl + Q para iniciar la grabación de macro 1-9 y Alt + 1-9 para reproducir una macro).

Una vez que te acostumbras, sabes que puedes simplemente buscar una variable, ctrl + shift + (home || end || teclas de flecha) a través de tu código, eliminar, copiar/pegar y usar al teclado hechicería para agradar, por ejemplo, convertir un archivo CSV en un grupo de consultas SQL en 30 segundos.

+11

Esto no está refactorizando. Es solo edición. –

+2

refactorización es solo edición automática. – quodlibetor

+6

@quotlibetor: Escribir Beethoven's Fifth solo está editando según su definición. La diferencia entre refactorizar (mover fragmentos de código bien definidos de manera semánticamente legal) es tan cualitativamente diferente que mover fragmentos arbitrarios de texto con un significado desconocido que la distinción entre los dos términos no se puede borrar. –

0

Hasta donde yo sé, los únicos IDEs que tienen un soporte de Refactorización significativo para PHP son Zend Studio de los creadores de PHP y el plugin de Eclipse PHP. Aunque las características son muy básicas. Nada que yo sepa tiene las características de productos como Resharper for C#, etc.

1

He leído que el IDE Delphi para PHP tendrá capacidades de refactorización en el lanzamiento con nombre en código Crocodile, programado para principios de 2009. Consulte this link para obtener más información.

+0

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

3

Personalmente prefiero PHPEclipse IDE como mi principal herramienta de desarrollo. Pero realmente extraño la refactorización básica "reemplazar en todas partes en el proyecto" allí.

Pero muy simple encuentran/sed comando puede resolver fácilmente:

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

Así, utilizando esta forma inteligente se pueden encontrar referencias, renombrar, eliminar y hacer cualquier tipo de manipulaciones con el código fuente.

BTW: incluso no puede recordar todos estos parámetros y atributos, simplemente escríbalo una vez y llámelo por reverse-i-search.

Espero que esto ayude.

+2

Preste atención con el comando sed: cuando refactoriza una variable nombre que a menudo quiere _limitar el refatorio en un determinado concurso_, como por ejemplo, una determinada función. Puede tener la variable $ data mucho tiempo en una clase, pero es posible que desee cambiar su nombre solo en la función _dataRead(). La capacidad de hacer esto establece la diferencia entre un comando simple sed y un complemento IDE. –

2

Zend Studio puede Refactor un poco .....

13

Scisr es una herramienta sencilla refactorización, independiente para PHP.

Sé que esta es una vieja pregunta, pero ya que es una de las mejores versiones de las herramientas de refactorización de PHP, pensé en agregar mi nuevo proyecto a la lista.

Muchos de mis objetivos de diseño surgen de las insuficiencias de otros elementos mencionados aquí: están vinculados a ciertos IDEs, o intentan dictar sus prácticas de prueba, o requieren un montón de trabajo manual de rutina. Tengo la esperanza de crear una mejor experiencia general en Scisr. Es simple de instalar y ejecutar. Intenta ser inteligente, pero no también inteligente. Hace las tareas que he encontrado para prestarse mejor a la automatización. ¡Disfrutar!

+0

Acabo de leer la página de inicio de su proyecto. Estoy totalmente de acuerdo con el método detrás del proyecto y espero que lo haga bien. (Estoy desarrollando en una PC, así que lamentablemente tendré que esperar hasta que me mueva a Ubuntu antes de que pueda usarlo) –

+0

¡Me alegra que te guste! Si deseaba hacer algo de piratería informática, no debería ser demasiado difícil ejecutarlo en un entorno Windows. Mi suposición sería que las rutas de archivos serían el único problema real, y gran parte de eso es manejado por el código que descifré de CodeSniffer, que creo que soporta Windows. –

+0

El enlace está roto, esto parece ser: https://github.com/iangreenleaf/Scisr –

1

Pruebe Web IDE de IntelliJ. Ahora está en la etapa EAP (alfa/beta), pero lo uso como el único IDE durante varios meses, por lo que es estable y muy bueno.

+0

También uso PHPStorm, tiene soporte de refactorización muy básico: renombrar/mover, introducir variable, introducir constante, introducir constante, eliminar en línea, seguro. –

8

PhpStorm de refactorización apoyo JetBrains, http://www.jetbrains.com/phpstorm/index.html

La refactorización Cambiar nombre funciona para los archivos, funciones, constantes, clases, propiedades, métodos, parámetros y variables locales y globales. También siguientes refactorizaciones están disponibles:

  • Introducir variable
  • Introducir constante
  • Introducir campo
  • Inline variables

y ofrecen alguna licencia libre para abrir proyecto de código, así!

+2

De hecho, este IDE admite la refactorización. Desafortunadamente, tiene algunos problemas de usabilidad. Espero que se solucionen pronto. Por ejemplo, cuando haces un buscar/reemplazar en una selección, la ventana del editor salta por todos lados en "reemplazar todo". En general, me gusta y lo uso, aunque elegiría Aptana en un abrir y cerrar de ojos si admitía el cambio de nombre. – jeromeyers

+0

dentro de él impresionante, pero la usabilidad realmente apesta comparando con eclipse/netbeans. Por ejemplo, funciones BASIC como buscar/reemplazar y herramientas de equipo. – gaRex

4

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

PHP Refactoring Browser es una más reciente toma en el navegador Refactoring se describe en the good book. Podría necesitar algo de ayuda (por favor contribuya), pero tiene soporte para varias refactorizaciones comunes.

Al momento de redactar, el navegador es compatible con:

  • Extraer método
  • Cambiar nombre local variable
  • Convierte local a instancia de variable
  • Cambiar nombre de clase y espacios de nombres
  • Optimizar Uso declaraciones (Específico de PHP)

Hay un complemento SublimeText que realmente funciona. Cuando estoy buscando un nuevo código, aplicaré algunas de estas sencillas refactorizaciones para ayudarme a manejar la base de código.

Cuestiones relacionadas