Решил попробовать часто упоминаемую в последнее время IDE для работы с PHP от JetBrains, называется phpStorm. Так как до этого несколько лет использовал IDE NetBeans, сравнивать буду с ней. На объективность даже не рассчитывайте, этот пост основан на личных впечатлениях в первые N дней работы. Некоторые недостатки на самом деле наверняка окажутся «фишками» новой программы, просто я в достаточной степени прикипел к детищу Sun (ныне Oracle). Итак, начнем-с.
- Выглядит все достаточно стандартно. Сверху панель инструментов и табы, слева — вспомогательные навигационные панели типа project browser.
- + Достаточно удобно работать с «горячими» клавишами. В дистрибутиве идет PDF-файл с настройками.
- - Необходимо вручную прикрутить переименование файлов по клавише F2. Это одна из самых моих часто используемых «горячих» клавиш, поэтому столкнулся практически сразу.
- - Я привык выделять текст и вставлять символ кавычки (одиночную или двойную). Netbeans обрамлял кавычками выделенный текст, а вот PhpStorm тупо заменил текст.
- + Подсветка табов. Группируем файлы по маске (это называется scopes) и назначаем им разные цвета. Также в дропдауне «View as:» есть возможность фильтровать файлы проекта именно по этим маскам. Однако не нашел способов импортировать scopes из проекта в проект (судя по всему, это еще не реализовано) — это большой минус при использовании фреймворков.
- + Поиск классов (Ctrl + N) и файлов (Ctrl + Shift + N) по имени. Удобнейшая штука для того, чтобы подсмотреть, где, что и как реализовано.
- ? С трудом нашел, как подключить сторонние файлы, в частности фреймворк Kohana (system и отдельные модули). Изначально все добавил через
settings->directories
, но наблюдать все подключенные папки вперемешку с основным проектом не понравилось. Далее меня заинтересовал пункт «external libraries» в project-браузере. В общем, чтобы подключить сторонние папки, надо открытьsettings->project settings->php
, и там установитьinclude paths
. Достаточно долго и неочевидно, по крайней мере по сравнению с Include Path в Netbeans.
- + В контекстном меню файла есть возможность быстро перейти к файлу в Explorer’e.
- - По умолчанию измененный файл никак не выделяется. Чтобы включить эту функцию, идем в
Settings->IDE Settings->Editor->Editor Tabs
. Ставим галочку на «mark modified tabs with asterisk«. Появившийся на табе значок выглядит убого. Зато если в файле есть синтаксические ошибки, они будут подчеркнуты волнистой красной линией а-ля MS Word.
Попутно выясняется, что одновременно будут открыты только 10 табов — каждый последующий таб будет закрывать наименее используемый из уже открытых. Зато табы можно переместить влево или вправо — удобно при широкоформатном мониторе.
- - Вообще странно сделано поведение при закрытии модифицированного файла. Вместо того, чтобы предложить сохранить изменения, IDE просто закрывает таб. Если открыть его заново, убеждаемся, что изменения остались, но сам файл еще не сохранен. А вот если еще и закрыть IDE, то изменения сохраняются автоматически. Не самое очевидное поведение.
- + Закладки-подсказки справа от открытого скрипта. Красные для ошибок (обычно парсинга, но также красным выделяются вызовы методов без указания обязательных параметров), желтые — для потенциальных ошибок (warnings), синие — TODO-заметки (определяются редактором автоматически, попадают как «правильные» @TODO, так и обычные todo комментарии). В верхнем правом углу скрипта показывается итоговый квадратик-анализатор к текущим статусом проверки. При наведении на него можно увидеть, сколько каких закладок найдено.
- + В правой части удобные пиктограммы, показывающие, что данный метод переопределяет поведение своего предка, либо же найдены потомки с таким методом.
- - Странновато ведут себя подсказки (
Ctrl + Alt + Пробел
). Они не всегда разворачиваются полностью, оставляя прокрутку. Хотя вроде бы место позволяет показать всю подсказку целиком. Не работает подсказка дляparent::
. И вообще, все не могу привыкнуть, что хинты надо вызывать вручную (судя по всему, это сделано для увеличения скорости работы IDE).
UPD. Пока писал статью, вышла новая версия 98.91, в которой появилась возможность разрешить автоподсказки в настройках (точнее запретить, т.к. по умолчанию они включены). Работает, но как-то коряво (может это из-за подключения двух мониторов?):
- - Иногда кушает многовато памяти. При двух открытых небольших скриптах потреблял аж 200Мб оперативки. Закрытие этих файлов, а также закрытие проекта ничего не изменили. Только заново запустив IDE, получил потребляемость 60Мб (и это при отсутствии открытых проектов). При этом, как и в 1.02, имеется сборщик мусора, который несильно меняет ситуацию Правда, пики потребления памяти какие-то непредсказуемые, IDE может достаточно долго работать практически незаметно и ненапряжно.
- + Понравилось форматирование отступов больших блоков текста — выделяем кусок кода и жмем
Tab
(илиShift+Tab
, если двигаем влево). - + Нравится подсветка неиспользуемых переменных серым цветом.
- +- Вообще, в целом очень много различных настроек. Даже не знаю, плюс это или минус. Есть поиск по настройкам. Но лично мне было не очень удобно каждый раз идти в
File->Settings
, чтобы что-то поменять. Те же Directories или Include Paths можно было и в контекстное меню продублировать. - + Встроенная поддержка различных систем контроля версий (Git, SVN, Mercurial). Пока что Git сильно не ковырял, но использовать буду наверное больше как справочный GUI-клиент, основные операции все равно останутся в консоли. На вскидку у меня Git отказался работать через Proxy, хотя те же плагины обновлялись нормально.
В целом, очень приличный продукт. Проект постоянно развивается, новые сборки появляются каждую неделю. Когда закончится триал, буду думать насчет покупки DEV-лицензии.
Ссылки:
PS. Повторюсь, «обзор» поверхностный, это по сути первые впечатления от работы с IDE, так что прошу сильно не пинать
У меня похожие впечатления. Тоже перелез с Бобов и назад уже не вернусь. Просто качество их сильно снизилось в последнее время, что-то постоянно отваливалось или работало у меня неправильно. В общем — заколебало. Да и прогресса нет.
Думаю тоже купить в ближайшее время.
Здравствуйте, Иван.
PHPStorm действительно очень хорошая IDE. Пользуюсь ей больше года и доволен как слон, хотя пробовал работать в самых разных средах, включая phped, netbeans, zend studio и другие. Достаточно лишь того, что за phpstorm стоит многолетний опыт платформы Intellij Idea — лучшей IDE для Java, а это говорит о многом…
Самой сильной стороной этого редактора я считаю его «интеллектуальность» (IntelliSense), которая избавляет разработчика от рутины, позволяя ему просто творить, не задумываясь о насущных мелочах.
К числу таких вещей я отношу code surround, live templates, phpdoc competation, smart autocomplete, code inspection, рефакторинг и десятки других фич, которые делают эту среду разработки лучшей в своем классе. Также не может не радовать огромное количество хоткеев, благодаря которым можно вообще не прикасаться к мыши, а это, согласитесь, существенно увеличивает производительность.
Очень важно понять свою философию этой IDE. Дело в том, что тут, в отличие от других «стандартных» сред разработки, нужно прекратить мыслить понятиями файлов. Вообще забудьте о том, что у вас есть какие-то разрозненные файлы. Мыслите категориями проекта и классов. Тогда вас не будет удивлять автоматическое сохранение, невозможность быстрого переименования, невозможность работы с удаленными файлами напрямую и прочие вещи. Просто примите для себя такую аксиому: IDEA не предназначена для редактирования одиночных файлов. Приняв это, работать станет намного проще.
А вот с названными недостатками вроде очень странного способа подключения внешних библиотек и невозможности обрамления строки кавычками я с вами полностью согласен. Очень надеюсь, что разработчики наконец обратят внимание на эти мелочи.
1) перегруженные методы показываются и в нетбинсе
2) двигать табами большой блок текста можно и в нетбинсе.
3) неиспользуемые переменные тоже есть, во всяком случае в JS точно
и так далее
По кавычкам аля NetBeans точно был тикет в трэкере. За него можно проголосовать. Их мне очень нехватает.
Сохранение — это такая фича. Экономит время, хоть и непривычно сначала.
Ну и всё остальное, что странно и непривычно тоже можно поискать в трекере или туда добавить.
О, вот что в твиттере написали: «Well, we’ve fixed indexing performance and come other problems of last EAP. Fixed build will be published within next few hours».
@Костег
1. Сейчас под рукой только 6.7.1 и 6.8 — в них никак не показывается. Разве что где-то в настройках надо включать, что тоже не может радовать рядового пользователя.
2. Согласен.
3. В php нет.
я писал про последнюю стабильную версию (6.9.1)
Завтра проверю. Странно, что не заметил.
Все равно Eclipse не брошу потому что он хороший!
Я уже почти год как перешел на PhpStorm именно с NetBeans. После долгой настройки очень к ней привык. Правда одну вещь я не могу сделать как в бобах, там у меня был простой макрос, который при нажатии Ctrl-Alt-D копировал выделенный текст, создавал новую строчку и там засовывал его в var_dump(текст). В пхпсторме макросы какие-то жутко убогие и вводят символы именно посимвольно. Может есть какой-то метод чтобы сделать это побыстрее.
Иван, а какая у вас структура проекта на кохане? У меня это папка root в которой www и kohana, соответственно в проект в IDE я засовываю именно эту папку root. Сейчас я посмотрел на ваш подход и подумал, может на самом деле добавить в проект только application и www, а остальное как библиотеки, но в чем преимущества такого подхода?
@Макушкин
Преимущество в том, что я не держу для каждого проекта отдельную копию фреймворка. У меня они лежат в отдельным папкам по версиям + транк. А в проекте я могу быстро поменять системные файлы под другую версию.
Другое дело, что обычно когда проект хостится на Github’е, его делают готовым к применению из коробки, поэтому складывают туда папки фреймворка (точнее ссылки на ядро и модули), подключая как submodules, либо вообще копируя последнюю стабильную версию.
Подавляющее большинство описаных плюсов имеется в Netbeans (да и реализация возможностей у Netbeans порой лучше. Возможно сказывается то, что на них и работаю и привык), а минусы (ввиду сравнивание с этой IDE), как ни странно, отсутствуют …
Попробовав где-то полгода назад PhpStorm понял, что проект ещё сырой и многие фичи Netbeans меня сдерживают от перехода на альтернативный IDE. Спасибо, Иван, за обзор: понял, что не так много изменилось… Однако, раздражающая бага версии Netbeans 6.9 с memory heap при инициации шаблона кода по буквенному алиасу, видимо, заставит меня снова попробовать PhpStorm.
@avis
Да, мне тоже NB намного привычнее Приходится себя практически заставлять работать в PhpStorm, чтобы поближе познакомиться. Главное, что ошибки постоянно исправляются, IDE совершенствуется — есть движение вперед.
Не знаю почему, не меня тошнит от подобных IDE… Жду когда допилят Qt Creator по веб разработку, пока что остановился на VIM ( хотя, уже такие мысли, что никуда от VIMa не уйду )
@biakaveron
Именно поэтому я и перешел: в Нетбинс все новые штуки появлялись только для явы, а ПхпШторм несмотря на сырость продукта, очень активно развивается. Я более-менее активен на трекере и могу сказать, что за то время пока я там зарегистрирован номера тикетов увеличились от 2000 до 3000, т.е. есть надежда на то, что рано или поздно разработчики сделают из него конфетку
Признаюсь, пока я полноценный продукт не купил, мне нравится тестировать новые фишки в девелоперских сборках.
@Макушкин
> копировал выделенный текст, создавал новую строчку
> и там засовывал его в var_dump(текст)
Попробуйте через Live Templates (Surround with Live Template) — он правда текст не скопирует, но засунуть в var_dump(текст) легко (а вообще то нужен конкретный пример — создавайте тему там на форуме, посмторим вместе)
> Иногда кушает многовато памяти. При двух открытых небольших скриптах потреблял аж 200Мб оперативки.
Это только когда он делает индексацию (при старте нового проекта, при добавлении библиотеки в проект/или как доп. библиотеку, или при установке новой версии — когда идет переиндексация кеша)
> Попутно выясняется, что одновременно будут открыты только 10 табов
File | Settings | Editor | Editor tabs -> Tab Closing Policy. Увеличте до 20 или более если надо
> Почему-то хинт не показывается целиком
Аккуратненько так (с первог раза скорее всего и не получится) наводим мышку в самый правый нижний угол такого окошка … и растягиваем/уменьшаем меняя размеры. PhpStorm это запомнит.
@Andriy Bazanov
Да, про табы это было понятно. Я вообще про наличие дефолтного ограничения — так ли оно необходимо?
По интам — размер-то он запомнил, но вот выводит все равно как странно (выше, чем текущая строка) — как на скриншоте. И запоминает размер окошка не зависимо от содержимого, т.е. для другого кода он выведет хинт с последним использованным размером окна. Не очень удобно.
@biakaveron
Ну, у них вообще другая философия — уж очень отличается от того как подавляющее большинство PHP программистов привыкло работать (тот же — нету открыть файл из командной строки, ибо все работает только через проекты + нету «Сохранить как» (а есть «Copy File» + нету возможности открыть временную закладку (нужно обязательно создать файл, поработать там и потом удалить за ненадобностью) + прочее).
Насчет хинтов — в последней сборке есть такая бага (особенно проявляется на MacOS) — хинт (с доками) или окошко с функциями/переменными выскакивает в углу экрана или окна. У меня такого правда никогда не наблюдалось.
А насчет размеров хинта — я думаю что это правильное поведение (запомнить последний размер) — теперь можно настроить под себя (у меня, к примеру, высота такого окошка будет где-то 300-350px и ширина около 700px (почти пол экрана в ширину) — не жалуюсь ибо мне удобно (особенно когда я писал некоторые stubs (для WinCache & XCache модулей)
Пользователи бобов, подскажите, пожалуйста, какие функции есть в netbeans, отсутствующие в phpstorm? Реально очень интересно.
Первое, что не обнаружил, когда ставил шторм — это отсутствие шаблонов новых файлов. Я просто плохо искал или это была ещё молодая версия?
Наверное, очень-очень-очень молодая.
@avis
Скорее всего первое.
File | Settings | File Templates
Ага, settings->file templates было одним из первых моих пунктов в настройках, чтобы добавить шаблон для классов Ko3.
В принципе, помимо упомянутых ранее «автокавычек», мне не хватает одновременной работы с несколькими проектами в одном окне. Переключаться не очень удобно. Хотя такая необходимость не является повседневной, конечно.
@biakaveron
Возможно из-за этой фишки просто нереально работать в группе из десятков проектов: если IDE подвисает, то после отвисания решает обновить индексы, и начинается АД, во время которого можно смело идти пить кофе/чай/курить/смотреть сериал…
@biakaveron
Как вариант (это наверное не совсем то, но можно попробовать, авось) залезть в Settings | Directories и добавить папку(и) из другого проекта используя «Add Content Root». В результате получаются как бы подпроекты … но как это все вместе будет работать это другой вопрос (например, code completion если есть классы с одинаковыми именами …)
@Andriy
Я пробовал — несерьезно это Проекты начинают пересекаться, да и заранее не видно, папку какого проекта ты смотришь.
@Avis
Вообще, ИМХО, когда производитель начинает волноваться за производительность больше, чем потребитель — это уже паранойя. Ну тормозят сразу 10 проектов — закрой лишние. В конце концов, 10 открытых IDE будут глючить больше, чем одна с десятью проектами, а вот отбирать возможность открыть 2 в одном…
@biakaveron
у меня просто все проекты разбиты на группы (либо по заказчику сгруппированы, либо по названию студии, где разрабатывается). 3 этих группы имеют много проектов… В общем, тоже считаю, что это морока пользователя, а не разработчиков IDE: озвучиваются требования и пользователи уже решают, могут ли они пользоваться такой IDE или нет. В целом, и меня не напрягает это при работе на домашней машине, которой абсолютно начхать на количество проектов. Однако на рабочей машинке и на ноуте бывает жёстко. А так как структура проектов у меня на всех машинах синхронится, то удобство работы начинает сильно сказываться от железа.
Пробовал phpStorm, но что-то уж слишком не понравилась скорость работы в линуксе, много других мелочей. Через полгода может быть снова попробую. Спасибо за обзор, все по делу, но пока NetBeans наше все)
По поводу File Templates: в Netbeans оные гораздо удобней сделаны, как мне показалось.
Банальное сваливание всего в кучу как-то не кошерно. Не нашёл, как определить пользовательские переменные шаблона с заданием им значений (то, что их можно заполнить при создании файла не подходит: не удобно и много может оказаться). Так же не нашёл, где бы посмотреть синтаксис языка шаблонов для работы с его переменными (поработать со строками переменных шаблона, с окружением создаваемого файла, всякие функции)…
Гуру шторма — закажите какой-нить сложный по-вашему шаблончик файла или тыкните на нормальные маны с экзамплами…
А ещё не получилось отключить вездесущую новую строку — всегда вставляется автоматом после сохранения файла. В настройкай отступов что-т не нашлось…
p.s. @biakaveron сорь, что превращаю обсуждение в faq. Я ещё чуть-чуть и перестану (как только пойму, видимо, что с Netbeans перейти не могу).
Сергей, ничего страшного. Это же не оффтоп и не реклама комплексной раскрутки сайта
@avis, в хелпе отлично описано, как работать с live templates.
Пустая строчка настраивается чекбоксом IDE Settings → Editor → Ensure blank line before end of file on Save.
@Sam Dark
За пустую строчку большое спасибо.
Я интересовался File Templates. С Live Templates я разобрался сразу же — там всё просто (благо в работе лайв темплейтов пользую с дюжину и было легко их воспроизвести в шторме).
Добрался до оформления кода. Не получилось указать цвет выделения скобки при обнаружении её пары. Почему-то не обнаружил, где найти параметр, определяющий подсветку строки под курсором. В пустом документе строка подсвечивается вся, а вот в куске кода — только левая колонка (та, что содержит номер строк) и пару пикселей поля…
@avis
Settings | Editor | Colors & Fonts | General
1) Matched brace (а так же Unmatched brace)
2) Caret row
Если после изменения #2 все еще не подсвечивает всю строку а только кусок — то это значит что где-то в другом месте перекрыт задный фон. Если это PHP-файл, то это скорее всего здесь: Colors & Fonts | PHP | PHP code (самый первый в списке) — надо убрать задный фон.
@Andriy Bazanov
Спасибо! Как раз нашёл это и полез обновлять страничку для просмотра последних комментариев в надежде найти наводку на реализацию сложных file template’ов, а тут Ваш коммент…
@avis
Я шаблонами файлов не балуюсь — создал 2 или 3 простеньких, мне и хватает. Я с NetBeans не особо знаком (так, ставил где то с год назад для пробы) поэтому не знаю каковы его возможности в этом плане и что Вам не достает что бы реализовать что-то похожее в PhpStorm. Хотелось бы услышать хоть какие-то реальные наводки/примеры…
По live темплейтам, кстати: в отличие от бобов, при отображении подсказок не отображает возможный шаблон кода, который может быть вызван текущим сочетанием клавиш…
@Andriy Bazanov
мой предпоследний коммент был о том, что я дошёл до решения проблемы практически одновлрепенно с Вашей подсказкой.
А по поводу шаблонов… В Netbeans, как я уже упоминал, есть возможность компоновки шаблонов по папочкам. У меня например, есть папочка с шаблонами для ko2 и ko3. В них — шаблоны голого контроллера, темплейт контроллера и класса хелпера, а так же шаблоны для моделей (обычной голой и для разных ОРМ) и интерфейсов. Каждый шаблон принимая только название, заполняет корректно весь сопутствующий ему код: наименование класса (регистр имени от названия файла), сопутствующие комментарии с копирайтами и авторством (в зависимости от проекта и исполнителя), ревизией, кратким описанием и прочим. Тык — и вот у тебя рабочий код. только дополняй функционал…
Да, и ещё — бобы запоминают последний используемый шаблон. У шторма это не заметил…
@avis
Ну да — папок в шаблонах нет — неудобно (если их, шаблонов, много). Стандартных переменных очень мало (по сути только имя пользователя (в системе) и дата/время в деталях). Такой переменной как «имя проекта» нет, ибо работа с проектами у них устроена совсем по другому ихняя (философия, блин). Но … некоторые переменные можно брать из VCS, если используется (например, \$Revision$). Поэтому согласен, что (судя по документации) возможности шаблонов слабые.
Вот пример моего шаблона (лично мне хватает. Насколько он правильный — это другой вопрос — я VCS не использую)
Вы не указали тип исходника Я объединил в один коммент, так сказать для краткости.
biakaveron
Может вопрос не совсем в тему, но никто случаем не знает как «починить» форматирование кода в NetBeans IDE 6.9.1 ?
Например, в кохане объявление класса начинается так:
<?php defined('SYSPATH') or die('No direct script access.');
Но если отформатировать код нет бинсом, он разрывает строчку:
<?php
defined('SYSPATH') or die('No direct script access.');
НетБинс 6.8, такой болячкой не страдал. Хотя это не напрягает, но хотелось бы единое оформление.
Что ж. Посидел я несколько дней на Шторме… Хочу сказать, что IDE действительно достаточно мощная и гибкая в настройках. Переход с NetBeans потребовал глубокого копания и кастомизации под привычные виды и деятельность, но в целом, многое прошло благополучно и прижилось без отторжения.
Остался открытым вопрос по шаблонам файлов, но, чую, на выходных окопаюсь в их трекере и буду искать инфу по форумам сообщества — авось что-нить найду полезное или попробую соратников экс-Нетбиновцев по сабжу. Если пройдёт успешно, думаю, стоит будет приобрести лицензию.
По субъективным ощущениям и сравнивая с бобами, phpStorm работает шустрее, памяти кушает поменьше и не уходит в длительные раздумья в критических ситуациях. завершение кода и подсказки немного отличаются от оных в NetBeans, но это дело привычки. Как и Ивана, обескураживает отсутствие «окавычивания» строки при пыделении в тыкании в кавычки. Но хоть закрывающую скобку при стоящей такой же скобке даёт нарисовать.
@bagir
В 6.9 такого не наблюдал.
@avis
А меня сейчас удивляет подсказка при наборе комментариев. Я еще понимаю phpDoc’овские @property и т.д., но обычные функции…
@biakaveron
Эту багу (подсказка при наборе комментариев) исправили на след. день — надо только дождаться новой сборки (там уже и «отсутствие “окавычивания” строки » исправили (точнее добавили такую возможность).
Возрадуйтесь новой сборке: 98.145 — надеюсь они починили дебагер, а то у меня он совсем (почти что) не работал.
Ну, вот теперь вообще шоколад!
@biakaveron
Cтранно, я даже не настраивал нетбинс — все по дефолту. Просто кликнул Source->Format. А вы никак не ковыряли настройки, связанные с форматирование кода?
Трогал, но они касались табов и расположения скобок. Как воспроизвести такой косяк? Какая последовательность действий в 6.9?