Контент


Впечатления от IDE PhpStorm

Решил попробовать часто упоминаемую в последнее время IDE для работы с PHP от JetBrains, называется phpStorm. Так как до этого несколько лет использовал IDE NetBeans, сравнивать буду с ней. На объективность даже не рассчитывайте, этот пост основан на личных впечатлениях в первые N дней работы. Некоторые недостатки на самом деле наверняка окажутся «фишками» новой программы, просто я в достаточной степени прикипел к детищу Sun (ныне Oracle). Итак, начнем-с.

  • Выглядит все достаточно стандартно. Сверху панель инструментов и табы, слева — вспомогательные навигационные панели типа project browser.

    Основное окно PhpStorm

  • + Достаточно удобно работать с «горячими» клавишами. В дистрибутиве идет 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, хотя те же плагины обновлялись нормально.

    Контекстное меню Git

В целом, очень приличный продукт. Проект постоянно развивается, новые сборки появляются каждую неделю. Когда закончится триал, буду думать насчет покупки DEV-лицензии.

Ссылки:

PS. Повторюсь, «обзор» поверхностный, это по сути первые впечатления от работы с IDE, так что прошу сильно не пинать ;)

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Опубликовано в Новости.

Теги: , .


Комментарии (63)

Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.

  1. bagir пишет:

    @biakaveron
    Просто поставить нетбинс 6.9.1 (не настраивая), открыть любой кохановский файл, тот же bootstrap и кликнуть Source->Format.
    И нетбинс форматируя код, разорвет строку
    <?php defined('SYSPATH') or die('No direct script access.');
    на две строки:

    <?php
    defined('SYSPATH') or die('No direct script access.');

    На версиях до 6.8 (включая 6.8) такой проблемы нет. Узнавал у товарища, такая же ситуация и он откатился на 6.8. Я тоже пока на 6.8 сижу.

  2. biakaveron пишет:

    @bagir
    Посмотрите в настройках Editor->Formatting->(language PHP)->(category «blank lines»), возможно там.

    Кстати, кто-нибудь знает, как настроить PhpStorm, чтобы он делал отступы табами, а не пробелами? Например, когда я открываю массив (array() и нажимаю Enter, у меня генерируется отступ в три пробела (т.е. длина таба), но не таб. Аналогично с внутренностями методов и классов (отступ после открывающей после фигурной скобки)

  3. Andriy Bazanov пишет:

    @biakaveron
    File | Settings | Code Style | General | Tabs and Indents
    Выбираем закладку PHP, тикаем «Use tab character» и настраиваем отступы под себя (примечание: все значения задаются в количестве пробелов. Для себя я настроил 4, 4, 4)

  4. avis пишет:

    > Посмотрите в настройках Editor->Formatting->(language PHP)->(category “blank lines”), возможно там.

    Сейчас любопытства ради пробежался по настройкам переноса строки в 6.9.1 — действительно не получилось найти штуку, которая влияет на перенос строки после <?php… *scratch*

  5. bagir пишет:

    @biakaveron
    Попробовал все настройки поизменять, и как и avis не обнаружил ничего влияющего на перенос строки после <?php.

    Вот незадача :)

  6. biakaveron пишет:

    @Andriy Bazanov
    У меня все это было настроено. Поковырявшись как следует, нашел что-то похожее — в Code Style|Wrapping and Braces секция Array Initializer должна содержать значение Chop down if long. Все остальное не помогало.

  7. Ржевский пишет:

    Блин… то ли у меня руки крюки, то ли не понимаю чего-то, но уже неделю не могу нормально ни одну IDE под php состыковать с denwer

  8. Evgeny пишет:

    Подскажите пожалуйста насчет автодополнения кода в CodeIgniter 2. Много читал в гугле насчет этого. Но полностью удовлетворяющий вариант так и не нашел.
    Итого как работает худо-бедно сейчас. Вставляю строки :

    /**
     * @property CI_DB_active_record $db
     * @property CI_DB_forge $dbforge
     * @property CI_Benchmark $benchmark
    ...
    [и.т.д property]
    */
     
    class CI_Controller {};
     
    /**
     * @property CI_DB_active_record $db
     * @property CI_DB_forge $dbforge
     * @property CI_Config $config
     * @property CI_Loader $load
     * @property CI_Session $session
     */
     
    class CI_Model {};
    /**
     */

    В какой-либо свой контроллер. Тогда во всех файлах работает автодополнение. Писать можно. Но… php ругается на двойную декларацию класса CI_Controller. Ну оно и понятно :( Приходится при просмотре результатов работы в браузере все время вырезать эти строки, а потом заново вставлять.

    С другой стороны вставка этих строчек в файл …system/core/Controller.php как советовали в решениях совсем не помогает, автодополнение не работает вообще.

    Посоветуйте пожалуйста, очень хочется человеческое решение.

    UPD. И кстати появилась еще одна неприятность. При написании кода PhpStorm начинает сыпать на меня ошибки, которых по сути нет. Например когда я пишу что-то на манер

    $data = array('link' =&gt; $link);


    получаю подчеркивание строки и «data — undefined variable» :(

  9. Andriy Bazanov пишет:

    @Evgeny
    1) Как вариант: вставляйте эти строки для class MyController extends CI_Controller {}; и потом используйте MyController как базовый класс для всех Ваших классов.

    2) «вставка этих строчек в файл …system/core/Controller.php» — вообще то должно работать (по идее). Какие ошибки выдает? Просто так ведь не может не работать.
    З.Ы. Я сам с CodeIgniter не работаю, но разбирался раньше как его подружить с PhpStorm — и один из этих загугденых советов таки работал. Также — http://youtrack.jetbrains.com/issue/WI-1174

    3) «UPD. И кстати появилась еще одна неприятность.» — самый обычный фрагмент, ничего криминального не замечено — у меня работает. Попробуйте воспроизвести эту проблему в новом пустом проекте и попробуйте «File | Invalidate caches…» — помогает в некоторых вот таких «х.з. че это» ситуациях. Если не работает только в Вашем конкретном коде — нужен тогда полный код что бы проанализировать возможную причину…

  10. Evgeny пишет:

    @Andriy спасибо за ответы)
    1) Решил проблему простым созданием пустого контроллера autoload.php с указанными строками, который в проекте не используется. Дополнение подхватилось.
    2) Не знаю, почему не получалось подхватить с родительского файла Controller.php, он ведь наследуется моими контроллерами… но тем не менее.
    3) И ошибки тоже исчезли )) Так что теперь можно кодить и разбираться с фреймворком. Как немного разберусь, перейду наверное на Кохану.

  11. Алексей пишет:

    Добрый день. Помогите разобраться :)
    Поставил Эту IDE. Все замечательно, Только вот она «не видит классы фреймвока»
    Из-за этого получается что не работает автодополнение, нельзя провалиться из любого места кода в класс фреймворка, чтобы посмотреть как там что работает.
    Классы же которые внутри модуля видны и работаеют как надо.

    P.S приложение работает, т.е дело только в настройке IDE.
    P.P.S zend Framework

  12. biakaveron пишет:

    Есть подозрение, что к проекту подключены только непосредственно разрабатываемые Вами файлы и папки. Их и видно. Чтобы добавить в проект другие директории, откройте Настройки (Settings) и там в Настройках проекта (Project Settings) необходимо указать подключаемые директории либо в Directories (Add Content Root), либо в PHP (добавляем include_path). Вообще, рекомендую обратить внимание на настройки в Directories, если указать Resourse roots (IDE будет подсказывать пути к картинкам, скриптам и стилям) и Exclude Folders (зачем индексировать всякие там логи и кэш?), то работать будет удобнее и пошустрее.

1 2

Продолжение обсуждения

  1. Tweets that mention Впечатления от IDE PhpStorm | Изучаем Web -- Topsy.com ссылается на эту запись on 6 октября 2010

    [...] This post was mentioned on Twitter by Vladimir Statsenko, Brotkin Ivan. Brotkin Ivan said: PhpStorm: первые впечатления http://brotkin.ru/2010/10/04/ide-jetbrains-phpstorm/ #phpstorm [...]



Можно включить подсветку кода: <code><pre lang="">...</pre></code>
Разрешены некоторые HTML теги

или используйте trackback.