Инструменты для рефакторинга PHP-кода [закрыто]

Существуют ли инструменты, поддерживающие рефакторинг PHP-кода (переименование переменных, извлечение методов, поиск ссылок на методы, ...)? Спасибо.

21.08.2008 12:45:26
Я думаю, что действительно трудно иметь надежный рефакторинг на динамическом языке ...
Andrei Rînea 10.12.2010 09:40:36
Да, это так, но я подозреваю, что реальная проблема здесь заключается в отсутствии использования хорошей инфраструктуры (синтаксический анализ, статический анализ, трансформация) для построения инструмента. Пока основы не прочны, вряд ли есть смысл пытаться построить дом.
Ira Baxter 28.08.2012 02:37:55
Основы укрепляются. См. Stackoverflow.com/a/21400723/120163
Ira Baxter 28.01.2014 10:31:18
В конце 2017 года я начал работать над инструментом рефакторинга AST. Ректор: github.com/RectorPHP
Tomáš Votruba 16.10.2017 16:40:20
15 ОТВЕТОВ

PDT для Eclipse поддерживает базовый рефакторинг (о котором я знаю). Вы можете переименовывать классы и автоматически переименовывать их, когда на них ссылаются, и я думаю, что вы даже можете перемещать файлы и изменять их ссылки include / require.

0
21.08.2008 12:52:06
В то время, когда я писал это, я считаю, что это было верно для ФДТ.
Brian Warshaw 16.05.2012 14:22:52
Нет, сейчас нет. Это главная слабость PDT :( Но в некоторых следующих выпусках это будет.
gaRex 22.07.2014 03:36:15

Может быть, это потому, что мне все еще не безразличны концепции рефакторинга, но мне не нравится, когда инструмент делает это для меня.

Я по-прежнему предпочитаю проводить рефакторинг в большинстве случаев вручную, потому что это заставляет меня замедляться и действительно думать о том, что я перемещаю и почему.

2
21.08.2008 12:55:19
Рефакторинг не должен замедлять вас. Рефакторинг должен быть быстрым и уверенным шагом в развитии. Если рефакторинг чувствует что-то, на что вам нужно обратить дополнительное внимание, вы пропустите это в большинстве случаев просто для удобства.
viam0Zah 23.11.2010 11:21:46
Я согласен с Марком. кроме того - я не понимаю, каков главный аргумент в пользу рефакторинга: «Это приводит код в формат, приемлемый и понятный для любого программиста из любой части земного шара». Но мы все разные. То, что легко для меня, может быть трудным для кого-то другого, и если вы реорганизуете мой код для кого-то другого - мне будет непросто следовать. Так какой в ​​этом смысл?
Stann 7.01.2011 19:12:29
Я не согласен с тем, что рефакторинг призван «привести код в формат, приемлемый и понятный для любого программиста». Простейшим примером является переименование метода, если имя метода неверное, вы можете легко его улучшить, будучи уверенными, что ваши изменения не затронут кого-либо еще. Очевидно, что если вы предоставляете банку для использования другими, вы не будете переименовывать публичные методы, вы создадите новый и осудите старый. Но в этом случае вы все равно могли бы выполнить рефакторинг, чтобы ваш внутренний код вызывал функцию с лучшим именем.
Juan Mendes 16.03.2011 23:08:30
Хотя это правда, что рефакторинг должен быть уверен, потому что вы меняете структуру, а не функциональность, ручной рефакторинг определенно замедляет вас, потому что вы хотите убедиться, что вы не пропустили ни одной детали. Точно так же, как если бы вы конвертировали сочинение из Чикаго в оксфордский стиль (всегда хорошая идея). Вы не изменяете семантику текста, но вы меняете синтаксис, и в процессе расчесывания вы можете обнаружить (а), что в рефакторе нет необходимости, или (б) другие вещи, которые вам нужно очистить. Я думаю, что это хорошее упражнение.
Paul d'Aoust 17.02.2016 17:09:28

В среде IDE NetBeans есть возможность рефакторинга, но она не всегда работает. Однако я использую 6.1 с ранним доступом к PHP. Я ожидаю, что 6.5 будет иметь лучшие возможности рефакторинга с PHP.

5
21.08.2008 12:58:25
Я использую Netbeans 6.5, и вы можете делать такие вещи, как методы переименования, но он не фиксирует ссылки в других файлах, даже в файлах того же проекта, что делает его в основном бесполезным.
cletus 25.12.2008 14:49:54
Я использую NetBeans 6,7, он вроде работает ...
Ronald Conco 29.10.2009 17:20:13
Я использую 6.9.1, и я думаю, что возможности рефакторинга все еще ограничены поиском / заменой строк в случае PHP. Для динамического языка возможности рефакторинга всегда будут ограничены. Вы по-прежнему не можете делать такие вещи, как щелчок правой кнопкой мыши по имени класса и переименование его во что-либо другое во всех контекстах.
rjha94 8.04.2011 08:58:50
Использование Netbeans 7.2 (/ 3) в большинстве случаев работает как прелесть. Переименование классов / методов / переменных в разных контекстах.
juwens 30.03.2013 18:39:11

В Netbeans 6.5 нет поддержки рефакторинга для PHP, хотя она появится в будущей версии.

Плагин PDT eclipse также не поддерживает рефакторинг.

Aptana также не поддерживает рефакторинг. Я не мог заставить goto определение работать.

Я заканчиваю тем, что использую поиск и замену в настоящее время. Мне тоже хотелось бы хотя бы переименовать поддержку функций.

1
21.08.2008 14:58:55

rephactor - это инструмент автоматического рефакторинга. Это все еще немного неполно, но у него есть несколько основных рефакторингов.

Иначе, хороший набор тестов - действительно лучший инструмент для рефакторинга.

11
30.09.2008 08:06:06
Это использует регулярные выражения для поиска кода. Это просто не безопасно.
Ira Baxter 4.09.2009 05:13:37
Автоматические рефакторинги никогда не бывают. Вы должны пройти тесты до и после проверки операции. Rephactor фактически интегрирует поток тестирования до / после.
troelskn 5.09.2009 13:39:47
@troelskn: Никогда? Почему инструмент рефакторинга должен быть реализован таким образом, чтобы повредить вашу программу? Это просто означает, что у вас действительно плохой инструмент рефакторинга. Это технически просто сделать большинство реорганизаций правильно . Это много инженерного пота, и большинство людей не хотят за него платить, и это объясняет, почему то, что там есть, вообще довольно плохо. Но это не значит, что инструменты рефакторинга должны быть сломаны.
Ira Baxter 1.09.2010 03:37:31
Любые изменения в коде могут привести к ошибкам.
troelskn 1.09.2010 10:18:34
@troelskn: Не совсем. Да, с динамическими языками, поскольку привязка реализации имени выполняется во время выполнения. Статические языки, такие как Haskell или C ++, где привязка реализации имени выполняется во время компиляции, / до / выполнения кода, могут обеспечить рефакторинг, который гарантирован успешный. Вот почему динамические языки, как правило, отстой.
Jesse 28.10.2010 06:33:50

Тем не менее, мой любимый инструмент рефакторинга - хороший EditPlus в сочетании с супербыстрым поиском файлов в Total Commander . (Подсказка: Alt + F7) Я полностью согласен с ответом Марка Бика о том, что вы хотите иметь полный контроль над тем, что и где заменяется.

Всякий раз, когда мне нужно сделать какой-то рефакторинг, я создаю список в общем количестве файлов, которые я хочу изменить, либо выполняя поиск с помощью встроенной функции, либо просто выбирая их, а затем перетаскиваю их все в EditPlus

Editplus может искать и заменять текущий файл, выделение или все открытые файлы, используя обычное сопоставление текста, сопоставление регулярному выражению или многострочное сопоставление. Это действительно дает вам полный контроль :)

Кроме того, что удобно для рефакторинга кода, это Macro Recorder от EditPlus (Ctrl + Q, чтобы начать запись макроса 1-9 и Alt + 1-9, чтобы воспроизвести макрос).

Как только вы это освоите, вы знаете, что можете просто искать переменную, ctrl + shift + (клавиши курсора home || end ||) по своему коду, удалять, копировать / вставлять и использовать эту клавиатуру, чтобы понравиться, например, преобразовать файл CSV в набор SQL-запросов в течение 30 секунд.

2
30.09.2008 08:13:39
Это не рефакторинг. Это просто редактирование.
Ira Baxter 4.09.2009 05:11:20
рефакторинг - это просто автоматическое редактирование.
quodlibetor 11.03.2010 02:03:08
@quotlibetor: Написание Пятого Бетховена - это просто редактирование по вашему определению. Разница между рефакторингом (перемещение четко определенных фрагментов кода семантически легальными способами) настолько качественно отличается от перемещения произвольных фрагментов текста с неизвестным значением, что различие между этими двумя терминами не может быть стерто.
Ira Baxter 1.09.2010 03:40:21

Насколько я знаю, единственные IDE, которые имеют существенную поддержку Refactoring для PHP, - это Zend Studio от создателей PHP и плагин Eclipse PHP. Хотя функции очень простые. Ничто из того, что я знаю, не имеет особенностей таких продуктов, как Resharper для C # и т. Д.

0
22.10.2008 11:13:38

Я читал, что IDE Delphi для PHP будет иметь возможности рефакторинга в выпуске под кодовым названием Crocodile, запланированном на начало 2009 года. Подробности см. По этой ссылке .

1
22.10.2008 15:52:19
Wouter van Nifterick 7.11.2011 17:37:30

Я лично предпочитаю PHPEclipse IDE в качестве основного инструмента разработки. Но я действительно скучаю по базовому принципу «замена везде в проекте».

Но очень простая команда find / sed может решить эту проблему легко:

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

Таким образом, используя это разумно, вы можете найти ссылки, переименовать, удалить и делать любые виды манипуляций с исходным кодом.

Кстати, вы даже не можете вспомнить все эти параметры и атрибуты - просто введите его один раз, а затем вызовите его с помощью reverse-i-search .

Надеюсь это поможет.

3
20.03.2017 10:18:17
Обратите внимание на команду sed: при рефакторинге имени переменной вы часто хотите ограничить рефаторинг на определенном соревновании , например, на определенной функции. Вы можете хранить переменную $ data много раз в классе, но вы можете изменить ее имя только в функции _dataRead (). Возможность сделать это устанавливает разницу между простой командой sed и плагином IDE.
Emilio A. L. 5.10.2011 11:09:25

Zend Studio может немного реорганизовать .....

2
8.11.2009 18:52:55

Scisr - это простой, автономный инструмент рефакторинга для PHP.

Я знаю, что это старый вопрос, но так как это один из лучших вариантов PHP-инструментов рефакторинга, я решил добавить свой новый проект в список.

Многие мои цели в области дизайна вытекают из недостатков других элементов, упомянутых здесь: они связаны с определенными средами разработки, или пытаются диктовать ваши методы тестирования, или требуют целой кучи механического ручного труда. Я надеюсь создать лучший опыт в Scisr. Это просто установить и запустить. Он пытается быть умным, но не слишком умным. Это делает задачи, которые я нашел, лучше всего поддается автоматизации. Наслаждайтесь!

13
21.08.2011 07:08:39
Я только что прочитал домашнюю страницу вашего проекта. Я полностью согласен с методом, лежащим в основе проекта, и надеюсь, что это хорошо. (Я занимаюсь разработкой на ПК, поэтому, к сожалению, мне придется подождать, пока я перейду на Ubuntu, прежде чем я смогу его использовать)
JW. 14.10.2010 06:32:48
Рад, что вам это нравится! Если вам захочется немного взломать, его не должно быть слишком сложно запустить в среде Windows. Я предполагаю, что пути к файлам будут единственной реальной проблемой, и большая часть этого решается кодом, который я написал из CodeSniffer, который, я считаю, поддерживает Windows.
Ian Greenleaf Young 15.10.2010 19:09:30
Ссылка не работает - похоже, это так: github.com/iangreenleaf/Scisr
Walter Mundt 17.08.2011 18:45:32
@ Уолтер-Мундт - спасибо. Некоторое время назад я изменил свое имя пользователя на github и сломал его. Исправлено сейчас.
Ian Greenleaf Young 21.08.2011 07:09:38

Попробуйте веб-IDE от IntelliJ. Сейчас он находится в стадии EAP (альфа / бета), но я использую его как единственную IDE в течение нескольких месяцев, поэтому он стабилен и очень хорош.

1
2.02.2010 10:10:18
Я также использую PHPStorm, он имеет очень простую поддержку рефакторинга: переименовать / переместить, ввести переменную, ввести константу, ввести константу, встроенное, безопасное удаление.
Juan Mendes 16.03.2011 23:11:31

Только что опубликовал статью о следующем выпуске Delphi для PHP, где вы можете увидеть механизм рефакторинга в действии.

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

1
9.06.2010 10:51:30

PHPStorm от Jetbrains поддерживает рефакторинг, http://www.jetbrains.com/phpstorm/index.html

Рефакторинг Rename работает для файлов, функций, констант, классов, свойств, методов, параметров, а также локальных и глобальных переменных. Также доступны следующие рефакторинги:

  • Введите переменную
  • Ввести константу
  • Ввести поле
  • Встроенная переменная

и они предлагают бесплатную лицензию на проект с открытым исходным кодом!

7
14.04.2011 20:38:45
Действительно, эта IDE поддерживает рефакторинг. К сожалению, у него есть некоторые проблемы с юзабилити. Я надеюсь, что они исправлены в ближайшее время. Например, когда вы делаете поиск / замену в выделении, окно редактора все время перепрыгивает на «заменить все». В общем, мне нравится и пользуюсь им, хотя я бы выбрал Aptana в одно мгновение, если бы он поддерживал переименование.
argyle 30.09.2011 00:01:57
внутри это потрясающе, но юзабилити действительно отстой по сравнению с затмением / нетбином. Например, основные функции, такие как поиск / замена и командные инструменты.
gaRex 22.07.2014 03:34:53

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

PHP Refactoring Browser - более свежий взгляд на Refactoring Browser, описанный в хорошей книге . Он может использовать некоторую помощь (пожалуйста, внесите свой вклад), но он поддерживает несколько распространенных рефакторингов.

На момент написания, браузер поддерживает:

  • Метод извлечения
  • Переименовать локальную переменную
  • Преобразовать локальную переменную в экземпляр
  • Переименовать класс и пространства имен
  • Оптимизация использования операторов (специфично для PHP)

Существует плагин SublimeText, который действительно работает. Когда я смотрю на новый код, я применяю некоторые из этих простых рефакторингов, чтобы помочь мне разобраться в кодовой базе.

4
20.09.2013 00:14:21