
Рефакторинг PHP — це справжня знахідка! Але під час його виконання досить часто виникають рутинні операції та повторювані дії з кодом. І в кінцевому рахунку може залишитися багато синтаксичних помилок. Це часто вбиває будь-яку ініціативу. І це точно не круто. На щастя, сучасні IDE здатні взяти на себе частину завдань, поки розробник може зосередитися на процесі рефакторингу коду та архітектури в цілому, а не на боротьбі з нудним кодом.
Деякий час тому я навіть замінив безкоштовний NetBeans на платний PhpStorm, який має кращу реалізацію рефакторингу. І повірте, це того варте!
Хочу почати з невеликої зауваги щодо рефакторингу коду. Щоб виконати будь-яку команду в PhpStorm, викликати будь-яку функцію та знайти будь-який ярлик — достатньо запам'ятати лише одну комбінацію клавіш: Shift+Ctr/⌘+A (або , навіть якщо це забули).
Наприклад, список ToDo:
Отже, давайте розпочнемо наш рефакторинг. Ми завжди можемо натрапити на якісь частини коду, де методи настільки розростуться, що навіть випивка не допоможе. Тож спочатку «розігріємо» їх. Яка ж це важка робота — вручну виділити порівняно цілісну окрему частину, оформити її в окремий метод, розташувати всі необхідні змінні та записати їх у аргументи, додати повернені значення в новостворений метод. І скільки помилок з'явиться в процесі? Ні, геть цей проклятий рефакторинг. Працює — не чіпай! А тепер спробуємо це зробити, але за допомогою IDE.
Рефакторинг: виділити метод / функцію
Ось вам, наприклад, чудовий шматок коду, який просто просить про декомпозицію.
Виділімо наш код і… туманно почнемо згадувати... де може бути
І поки використання не стане автоматичним – давайте згадаємо про універсальний код , який ідеально підходить для пошуку дії навіть за частиною її назви.
Гаразд, запускаємо нашу дію — опа...
Ха, я випадково виділив break;
в кінці блоку, IDE помітила це розумно і завадила мені зробити сумну помилку. Такі автоматичні перевірки дуже корисні під час рефакторингу будь-якої великої частини коду, наприклад, як у циклі:
Після того, як ми визначили безпечний фрагмент коду та виконали
, з'являється діалогове вікно.У цьому вікні нам потрібно якось викликати наш метод, вказати його видимість та, за необхідності, впорядкувати аргументи.
До речі, я особисто використовую це діалогове вікно для визначення залежності «зовнішніх» змінних для довільного фрагмента коду, що дуже корисно при складному рефакторингу.
Ще кілька прикладів: рефакторинг «Виділити функцію/метод» для PHP
Ввести змінну
Блог IDE наводить такий приклад, але я використовую цю функцію трохи інакше. Наприклад, у нас є такий фрагмент коду:
Тут відразу не зрозуміло, і форматування цього коду є незручним процесом.
Виберіть першу логічну частину,
і виконайте Ввести змінну (
), введіть назву змінної у з'явленому діалоговому вікні.Ми діємо аналогічно з рештою коду. В результаті код стає значно зрозумілішим; і легше зрозуміти логіку в цих умовах.
Вбудована змінна
А якщо вам ліньки вручну виділяти фрагмент коду для експорту в змінну — storm може зробити це за вас. Поставте курсор десь поруч, виконайте
), але цього разу замість діалогового вікна з'являється випадаючий список, з якого ми можемо вибрати відповідний фрагмент коду. І IDE люб’язно виділила його для нас.Ввести поле
Ця функція працює аналогічно, вона лише додає властивість класу замість змінної.
Ви можете встановити видимість властивостей, а також місце, де їх оголосити (в поточному методі, описі класу або в конструкторі).
Ввести константу
Той самий принцип можна використовувати для виділення часто повторюваних рядків у константи.
Ім'я константи було запропоновано самою IDE. Все, що нам потрібно, це натиснути Enter, щоб насолодитися результатом.
Рефакторинг перейменування
Механізм перейменування, чи може хтось обійтися без нього? Він детально описаний у блозі IDE, тому я не буду повторюватися: Нові можливості рефакторингу перейменування в PhpStorm 2.0
Геттери/Сеттери
Сутності в Doctrine 2 (під час використання анотацій для їх оголошення) дають наочний приклад, де автоматичне генерування доступів/мутатора є дуже корисним. Просто опишіть властивості класу, потім викличте
, і виберіть, для яких властивостей ми повинні згенерувати методи.А ось результат наших «швидких і легких» робіт.
Якщо формат не зовсім підходить, шаблони генерації можна виправити на свій розсуд.
Редагування шаблонів методів генерації get * / set *.
Огорнути з
«Обгортання» коду в типових if(expr){…}
та while(expr){…}
. Це детально описано в блозі IDE:
Новинки в 3.0: Більше дій «Огорнути з» для PHP
Розумний детектор дублікатів коду
Це чудова річ, яка допомагає знаходити дублікати безпосередньо з IDE, замість запуску консольних утиліт з їх «порожніми» та непоінформативними звітами.
Вона починається звідси:
Знайдені дублікати сортуються за релевантністю (вартістю). Чим вищі вони — тим сумніша ситуація в коді. Зручно, що код у вікні попереднього перегляду можна масштабувати та редагувати. Це спрощує процес рефакторингу.
PHP Code Sniffer
Просто не забувайте налаштовувати Code Sniffer, більше того, його підтримка тепер інтегрована в IDE.
Використовуючи: Перевірка вашого коду за допомогою PHP Code Sniffer в PhpStorm 4.0
Розширене налаштування: Розширені параметри PHP Code Sniffer в PhpStorm 5.0
Міні-поради
1. Закрили файл / втратили місце, де були зроблені останні зміни? Це не важливо!
2. Використовуйте інструмент рефакторингу для прямокутного виділення коду (середня кнопка миші або увімкніть/вимкніть
у контекстному меню)Якщо ви почнете писати у так виділеному блоці коду — всі рядки зміняться одночасно.
3. Використовуйте живі шаблони
4. Ефективно керуйте різними задачами
5. Локальна історія — це круто!
6. І не забувайте про найзручнішу історію буфера обміну, яка викликається стандартною комбінацією клавіш вставки +Shift (або )
І деяка цікава статистика
PhpStorm збирає статистику, за якою визначає найчастіше використовувані функції у роботі та пропонує, що ще варто використовувати частіше.
P.S. О, і погляньте на абзац вгорі, хіба PhpStorm не дорогий? ;)
Супутні матеріали
- Офіційний блог про WebStorm / PhpStorm
- Офіційні відео від JetBrains
- Презентація про продуктивність та рефакторинг в Eclipse та IntelliJ Idea
Ця стаття є лише стартовою точкою серії нотаток про PhpStorm. Наступна тема — як працювати з налагодженням коду за допомогою цього чудового IDE та xdebug. Заявки на інші гарячі теми приймаються в коментарях. А більше інформації про наш досвід та експертизу в Symfony ви можете знайти тут.