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


68

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

+3

Я думаю, что действительно сложно иметь надежный рефакторинг на динамическом языке ... 10 дек. 102010-12-10 09:40:36

+2

Да, это так, но я подозреваю, что настоящая проблема заключается в отсутствии использования хорошей инфраструктуры (синтаксический анализ, статический анализ, преобразование), на котором для создания инструмента. Пока фундаменты не будут твердыми, вряд ли стоит пытаться построить дом. 28 авг. 122012-08-28 02:37:55

  0

Фонды становятся сильнее. См. Http://stackoverflow.com/a/21400723/120163 28 янв. 142014-01-28 10:31:18

  0

В конце 2017 года я смотрел работу над инструментом рефакторинга AST. Ректор: https://github.com/RectorPHP 16 окт. 172017-10-16 16:40:20

0

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

  0

В то время, когда я написал это, я считаю, что это было истина PDT. 16 май. 122012-05-16 14:22:52

  0

Нет, в настоящее время нет. Это основной недостаток PDT :(Но в некоторых из следующих выпусков он будет. 22 июл. 142014-07-22 03:36:15


3

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

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

+3

Рефакторинг не должен замедлять вас. Рефакторинг должен быть быстрым и уверенным шагом в развитии. Если рефакторинг ощущает то, на что вам нужно обратить дополнительное внимание, вы пропустит его в большинстве случаев только для комфорта. 23 ноя. 102010-11-23 11:21:46

  0

Я согласен с Марком, кроме того, я не получаю основной пункт рефакторинга: «Это привносит код в формат, приемлемый и понятный любому программисту из любого часть мира ». Но мы все разные. Для меня это может быть трудно для кого-то другого, и если вы реорганизуете мой код для кого-то другого - мне может быть нелегко следовать. Итак, в чем смысл? 07 янв. 112011-01-07 19:12:29

  0

Я не согласен с тем, что рефакторинг предназначен для «приведения кода в формат, приемлемый и понятный любому программисту». Самый простой пример - переименование метода, если имя метода плохое, вы можете легко его улучшить, уверенный в том, что ваш изменения не повлияют ни на кого другого. Очевидно, что если вы доставляете банку для других, вы не переименовали бы общедоступные методы, вы создали бы новую и осуждали бы прежнюю. Но в этом случае вы все равно можете реорганизовать так, чтобы ваш внутренний код вызывал лучшую именованную функцию. 16 мар. 112011-03-16 23:08:30

  0

Хотя верно, что рефакторинг должен быть уверенным, потому что вы меняете структуру, а не функциональность, ручной рефакторинг определенно замедляет вас, потому что вы хотите удостовериться, что вы не пропустили никаких бит. Точно так же, как если бы вы конвертировали эссе из Чикаго в Оксфордский стиль (всегда хорошая идея). Вы не меняете семантику текста, но вы меняете синтаксис, и в процессе расчесывания вы можете обнаружить (а), что рефактору не нужно, или (б) другие вещи, которые нужно очистить. Я думаю, что это хорошее упражнение. 17 фев. 162016-02-17 17:09:28


5

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

  0

Я использую Netbeans 6.5, и вы можете делать такие вещи, как методы переименования, но не исправляет ссылки в других файлах, даже в файлах в одном проекте, что делает его в основном бесполезным. 25 дек. 082008-12-25 14:49:54

  0

Я использую Netbeans 6.7, он вроде работает ... 29 окт. 092009-10-29 17:20:13

  0

Я использую 6.9.1, и я думаю, что возможности рефакторинга все еще ограничены поиском/заменой строк в случае PHP. Для динамического языка возможности рефакторинга всегда будут ограничены. Вы по-прежнему не можете делать такие вещи, как щелкните правой кнопкой мыши имя класса и переименуйте его во что-то еще во всех контекстах. 08 апр. 112011-04-08 08:58:50

  0

Использование Netbeans 7.2 (/ 3) рефакторинг работает как шарм, в большинстве случаев. Переименование классов/методов/переменных в разных контекстах. 30 мар. 132013-03-30 18:39:11


1

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

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

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

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


11

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

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

+14

Эта функция использует регулярные выражения, чтобы найти код. Это просто небезопасно. 04 сен. 092009-09-04 05:13:37

+5

Автоматические рефакторинги никогда не были. У вас должны быть тесты до и после, чтобы проверить операцию. Рефактор фактически интегрирует поток тестирования до/после. 05 сен. 092009-09-05 13:39:47

+6

@troelskn: Никогда? Почему инструмент рефакторинга должен быть реализован таким образом, который наносит ущерб вашей программе? Это означает, что у вас действительно плохой инструмент рефакторинга. * Технически * легко выполнять большинство рефакторингов * правильно *. Это большой инженерный пот, и большинство людей не хотят платить за это, и это объясняет, почему материал, который там вообще, довольно плохой. Но это не означает, что инструменты рефакторинга * должны быть разбиты. 01 сен. 102010-09-01 03:37:31

  0

Любое изменение базы кода подвержено риску возникновения ошибок. 01 сен. 102010-09-01 10:18:34

+5

@troelskn: Не вообще. С динамическими языками да, поскольку привязка имени и реализации выполняется во время выполнения. Статические языки, такие как Haskell или C++, где привязка имени и реализации выполняется во время компиляции,/до/код запускается, может обеспечить рефакторинг, который гарантирован успешный. Вот почему динамические языки, в общем, сосут. 28 окт. 102010-10-28 06:33:50

  0

@ Jesse: Это единственное, что мне не нравится в JS, свободные типы, которые запрещают простой рефакторинг, я люблю это иначе. @troelskn: Я не знаю, как любой может подумать, что инструмент рефакторинга, основанный на RegEx, может работать исправно. Intellij Idea гарантирует, что до тех пор, пока Intellij имеет доступ ко всему вашему коду, все рефакторинги безопасны и не изменят поведение кода. http://www.jetbrains.com/idea/features/refactoring.html 16 мар. 112011-03-16 23:00:44

  0

@jesse Это свойство языка, а не инструмент рефакторинга. 26 мар. 112011-03-26 14:19:21

  0

@JuanMendes #jetbrains #advertising #detected 22 июл. 142014-07-22 03:33:12

  0

@gaRex так? Это определенно связано с вопросом 22 июл. 142014-07-22 03:41:12

  0

Полностью согласен с комментарием о тестировании здесь, недавно написал сообщение в блоге по рефакторингу PHP - в значительной степени сосредоточился на том, чтобы сортировать выпускные версии и отличные тесты до фактического изменения кода: https://icyapril.com /programming/php/2016/12/24/refactoring-legacy-php.html#testing 30 дек. 162016-12-30 05:21:52


2

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

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

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

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

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

+11

Это не рефакторинг. Просто редактирование. 04 сен. 092009-09-04 05:11:20

+2

Рефакторинг - это просто автоматическое редактирование. 11 мар. 102010-03-11 02:03:08

+6

@quotlibetor: Написание пятой песни Бетховена просто редактируется по вашему определению. Разница между рефакторингом (перемещение четко определенных фрагментов кода семантически законными способами) настолько качественно отличается от перемещения произвольных фрагментов текста с неизвестным значением, что различие между этими двумя терминами не может быть стерто. 01 сен. 102010-09-01 03:40:21


0

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


1

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


3

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

Но очень просто найти/СЭД команда может решить легко:

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

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

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

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

+2

Обратите внимание на команду sed: при реорганизации переменной имя, которое вы часто хотите, чтобы _ refit refatory на определенном конкурсе_, как, например, определенная функция. Вы можете иметь переменную $ data много времени в классе, но вы можете изменить ее имя только в funcion _dataRead(). Возможность сделать это устанавливает разницу между простой командой sed и плагином IDE. 05 окт. 112011-10-05 11:09:25


2

Zend Studio может Refactor немного .....


13

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

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

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

  0

Я только что прочитал домашнюю страницу вашего проекта. Я полностью согласен с методом, стоящим за проектом, и надеюсь, что он преуспеет. (Я разрабатываю на ПК, поэтому, к сожалению, придется подождать, пока я перейду на Ubuntu, прежде чем я смогу его использовать) 14 окт. 102010-10-14 06:32:48

  0

Рад, что вам понравилось! Если вам захотелось немного взломать, не должно быть слишком сложно работать в среде Windows. Я предполагаю, что путь к файлам будет единственной реальной проблемой, и многие из них обрабатываются кодом, который я вырезал из CodeSniffer, который, я считаю, поддерживает Windows. 15 окт. 102010-10-15 19:09:30

  0

Ссылка не работает - это похоже на это: https://github.com/iangreenleaf/Scisr 17 авг. 112011-08-17 18:45:32

  0

@ Walter-Mundt - спасибо. Я изменил свое имя пользователя github некоторое время назад и сломал его. Исправлено. 21 авг. 112011-08-21 07:09:38


1

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

  0

Я также использую PHPStorm, он имеет очень базовую поддержку рефакторинга: переименовать/переместить, ввести переменную, ввести константу, ввести постоянное, встроенное, безопасное удаление. 16 мар. 112011-03-16 23:11:31


1

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

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


8

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

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

  • Введение Variable
  • Введение Константа
  • Введение Поле
  • Инлайн переменной

и они предлагают некоторую бесплатную лицензию, чтобы открыть исходный проект, как хорошо!

+2

Действительно, эта IDE поддерживает рефакторинг. К сожалению, у него есть некоторые проблемы использования. Я надеюсь, что они скоро будут исправлены. Например, когда вы выполняете поиск/замену в выборе, окно редактора перескакивает на «заменять все». В общем, мне нравится и использовать его, хотя я бы выбрал Aptana в одно мгновение, если он поддерживал переименование. 30 сен. 112011-09-30 00:01:57

  0

внутри этого удивительно, но удобство использования действительно сосет по сравнению с eclipse/netbeans. Например, такие функции BASIC, как поиск/замена и командные инструменты. 22 июл. 142014-07-22 03:34:53


4

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

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

В письменной форме, браузер поддерживает:

  • Extract Method
  • Переименовать Локальные переменная
  • Преобразования локального переменного экземпляр
  • Rename классы и пространства имен
  • Оптимизировать Использование Заявления (PHP-специфический)

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