Инструменты для рефакторинга PHP-кода
Существуют ли инструменты, поддерживающие рефакторинг PHP-кода (переименование переменных, извлечение методов, поиск ссылок на методы, ...)? Спасибо.
15 ответов
Scisr - это простой, автономный инструмент рефакторинга для PHP.
Я знаю, что это старый вопрос, но так как это один из лучших вариантов PHP-инструментов рефакторинга, я решил добавить свой новый проект в список.
Многие мои цели в области дизайна вытекают из недостатков других элементов, упомянутых здесь: они связаны с определенными средами разработки, или пытаются диктовать ваши методы тестирования, или требуют целого ряда механического ручного труда. Я надеюсь создать в целом лучший опыт в Scisr. Это просто установить и запустить. Он пытается быть умным, но не слишком умным. Это делает задачи, которые я нашел, лучше всего поддается автоматизации. Наслаждайтесь!
rephactor - это инструмент автоматического рефакторинга. Это все еще немного неполно, но у этого есть несколько основных рефакторингов.
Иначе, хороший набор тестов - действительно лучший инструмент для рефакторинга.
PHPStorm от Jetbrains поддерживает рефакторинг, http://www.jetbrains.com/phpstorm/index.html
Рефакторинг Rename работает для файлов, функций, констант, классов, свойств, методов, параметров, а также локальных и глобальных переменных. Также доступны следующие рефакторинги:
- Введите переменную
- Ввести константу
- Ввести поле
- Встроенная переменная
и они предлагают бесплатную лицензию на проект с открытым исходным кодом!
Среда IDE NetBeans имеет некоторые возможности рефакторинга, но кажется, что она не всегда работает. Однако я использую 6.1 с ранним доступом к PHP. Я ожидаю, что 6.5 будет иметь лучшие возможности рефакторинга с PHP.
https://github.com/QafooLabs/php-refactoring-browser
PHP Refactoring Browser - более свежий взгляд на Refactoring Browser, описанный в хорошей книге. Он может использовать некоторую помощь (пожалуйста, внесите свой вклад), но он поддерживает несколько распространенных рефакторингов.
На момент написания, браузер поддерживает:
- Метод извлечения
- Переименовать локальную переменную
- Преобразовать локальную переменную в экземпляр
- Переименовать класс и пространства имен
- Оптимизация использования операторов (специфично для PHP)
Существует плагин SublimeText, который действительно работает. Когда я смотрю на новый код, я применяю некоторые из этих простых рефакторингов, чтобы помочь мне разобраться в кодовой базе.
Я лично предпочитаю PHPEclipse IDE в качестве основного инструмента разработки. Но я очень скучаю по базовому принципу "замена везде в проекте".
Но очень простая команда find/sed может решить эту проблему легко:
find . -type f -name "*Controller.php" -print0 \
| xargs -0 sed -i 's/string1/string2/g'
Таким образом, используя это разумно, вы можете найти ссылки, переименовать, удалить и сделать любые виды манипуляций с исходным кодом.
Кстати, вы даже не можете вспомнить все эти параметры и атрибуты - просто введите его один раз, а затем вызовите его с помощью reverse-i-search.
Надеюсь это поможет.
Может быть, это потому, что мне все еще не безразличны концепции рефакторинга, но мне не нравится, когда инструмент делает это для меня.
Я все еще предпочитаю проводить рефакторинг в большинстве случаев вручную, потому что это заставляет меня замедляться и действительно думать о том, что я двигаюсь и почему.
Тем не менее, мой любимый инструмент рефакторинга - хороший редактор EditPlus в сочетании с супер-быстрым поиском файлов в Total Commander. (Подсказка: Alt+F7) Я полностью согласен с ответом Марка Бика о том, что вы хотите иметь полный контроль над тем, что и где заменяется.
Всякий раз, когда мне нужно сделать какой-то рефакторинг, я создаю список в общем количестве файлов, которые я хочу изменить, либо выполняя поиск с помощью встроенной функции, либо просто выбирая их, а затем я перетаскиваю их все в EditPlus.
Editplus может искать и заменять текущий файл, выделение или все открытые файлы, используя обычное сопоставление текста, сопоставление регулярному выражению или многострочное сопоставление. Это действительно дает вам полный контроль:)
Кроме того, что удобно для рефакторинга кода, это Macro Recorder от EditPlus (Ctrl + Q, чтобы начать запись макроса 1-9 и Alt + 1-9, чтобы воспроизвести макрос).
Как только вы это освоите, вы знаете, что можете просто искать переменную, ctrl + shift + (клавиши курсора home || end ||) по своему коду, удалять, копировать / вставлять и использовать эту клавиатуру, чтобы понравиться, например, преобразуйте файл CSV в набор запросов SQL в течение 30 секунд.
В Netbeans 6.5 нет поддержки рефакторинга для PHP, хотя она появится в будущей версии.
Плагин PDT eclipse также не поддерживает рефакторинг.
Aptana также не поддерживает рефакторинг. Я не мог заставить goto определение работать.
Я заканчиваю тем, что использую поиск и замену в настоящее время. Мне тоже хотелось бы хотя бы переименовать поддержку функций.
Я читал, что IDE Delphi для PHP будет иметь возможности рефакторинга в выпуске под кодовым названием Crocodile, запланированном на начало 2009 года. Подробности см. По этой ссылке.
Попробуйте веб-IDE от IntelliJ. Сейчас он находится в стадии EAP (альфа / бета), но я использую его как единственную IDE в течение нескольких месяцев, поэтому он стабилен и очень хорош.
Только что опубликовал статью о следующем выпуске Delphi для PHP, где вы можете увидеть механизм рефакторинга в действии.
PDT для Eclipse поддерживает базовый рефакторинг (о котором я знаю). Вы можете переименовывать классы и автоматически переименовывать их, когда на них ссылаются, и я думаю, что вы даже можете перемещать файлы и изменять их ссылки включения / требования.
Насколько я знаю, единственными IDE, которые имеют существенную поддержку рефакторинга для PHP, являются Zend Studio от создателей PHP и плагин Eclipse PHP. Хотя функции очень простые. Ничто из того, что я знаю, не имеет особенностей таких продуктов, как Resharper для C# и т. Д.