Правильный редактор для PHP

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

Хочется иметь нормальную реализацию IntelliSense, а не «деревянную» пародию на него в виде заранее определенного списка методов и констант языка, «вываливающегося» во время работы по поводу и без повода в виде полного списка. IntelliSense обязательно должен «знать» о всех используемыми вами классах, о их методах и переменных, то есть подключил через #include файл с определением своего класса, и редактор сразу же его подхватывает, подсказывая информацию о всех «внутренностях» объектов этого класса.

Не помешали бы так же подсказки во время набора названия функции в виде краткого описания функции (принимаемые параметры, есть ли перегруженные функции и т.п.). Особенно этого не хватает для самописных функций, в некоторых типичных редакторах я видел такие подсказки, но только для родных функций PHP. Ах да, еще очень удобно быстро переходить к определению функции из места ее вызова. Вообще, много чего еще хочется, причем все эти возможности считаю лишь толикой самых необходимых вещей в процессе кодинга и никак не излишеством…

Пример работы Intellisense в Visual Assist

Можно сказать, что в этом смысле моим идеалом является связка MS Visual Studio + Visual Assist, которую я использую при работе с C# и C++ (Visual Assist в этой связке просто как спасательный круг). Когда лишний раз не лезешь в другие файлы, чтобы посмотреть принимаемые параметры функции или названия тех или иных членов класса, это в любом случае способствует производительности и «приятности» процесса. Отсутствие среди своего инструментария такого редактора очень удручает, учитывая все большую (от версии к версии) объектно-ориентированность PHP.

И вот оно!

Логотип KomodoВсе же нашел для себя достаточно неплохой редактор — Komodo Edit. Если вы, как я, пользовались обычными редакторами, заменяющими стандартный «блокнот» и тоже жаждали человеческого IntelliSense, советую обязательно попробовать его. Он ко всему еще и бесплатный (о платной версии ниже) и работает на базе мозиловского фреймворка (XPFE), что делает его так же мультиплатформенным.

Komodo Edit

Этот редактор не идеал, в нем много хорошего, при этом, конечно же, ему есть куда еще развиваться. Но, в целом, в первые дни знакомства с ним у меня не было предела радости 🙂

Стоит так же отметить поддержку и других языков (Perl, Python, Ruby, Tcl), а так же JavaScript, CSS, HTML, XML и много другого (судя по списку файлов, которые он может открыть, он знает еще много языков и технологий, но не уверен насчет работы IntelliSense для них всех). Приятно удивила поддержка многих популярных фрейворков для JavaScript (для моего знакомства с jQuery это было кстати).

Я наверняка еще не успел изучить весь функционал Komodo Edit, но некоторые моменты хотел бы описать.

Первым делом я настроил под себя цветовую схему подсветки кода для PHP (Edit -> Preferences… -> Fonts and Colors), так как привык уже к цветам из Notepad++.

Настройка цветовой схемы для подсветки PHP кода

Так же полезным дополнением оказался плагин, который находит все TODO в открытом проекте или файле и выводит их в один список (на подобие того, как это реализовано в VS). И плагин, позволяющий видеть в виде одного списка все классы и методы, определенные в открытом файле (Source Tree) для быстрой навигации по ним.

Вообще перед использованием Komodo имеет смысл изучить его настройки, изменив те или иные параметры под себя. Я, к примеру, еще переопределил горячую клавишу для перехода к определению функций (сделал F12, как в Visual Studio 🙂 ).

В целом все работает достаточно хорошо, «земля и небо» по сравнению с кодингом в обычном редакторе.

Немного неудобно, что для полноценной поддержки IntelliSense обязательно нужно создавать файл проекта (его нужно просто сохранить в корневой каталог сайта). То есть если открыть один файл вне рамок проекта Komodo, все инклуды, прописанные в нем, не будут обрабатываться как-либо, и, соответственно, Komodo не будет ничего знать о функциях и классах, определенных в подключаемых файлах. Но, в целом, это маленькое неудобство пережить можно 🙂

С другой стороны, создание файла проекта дает возможность выполнить более тонкие настройки проекта, которые сохраняются и при каждом открытии проекта, Komodo будет помнить о них. Через него, к примеру, можно указать дополнительные директории для того, чтобы Komodo при работе с вашим проектом все время имел ввиду структуру классов и методов (для IntelliSense и различных подсказок), реализованных в файлах, которые лежат в подключаемой директории, даже если эти файлы ни как фактически не подключены (через include или require) к редактируемому файлу. Еще можно производить поиск или замену текста во всех файлах проекта. Так же, Komodo запоминает сделанные вами закладки внутри кода (Ctrl+F2) для каждого файла, это очень удобно.

Немного неприятно удивило, что Komodo Edit ничего не знает о встроенных в PHP классах (может, я делаю что-то не так?). К примеру, если нужно использовать класс mysqli:

$mysqli = new mysqli(HOST, USER, PASS, MBASE);
if (mysqli_connect_errno()) {
	print "Connect failed: ".mysqli_connect_error();
	exit();
}
$mysqli->query('INSERT.......');
$mysqli->close();

Когда после написания слова «$mysqli» я начинаю обращаться к методам этого объекта (пишу знак «->»), Komodo Edit не хочет подсказывать ничего о методах query, close и т.д., а в строке состояния ругается, что, мол, в глаза не видел определения этого класса… При этом со встроенными в PHP функциями проблем нет, к примеру, о семействе функций mysqli_* (оберткой над которыми и является класс mysqli) Komodo прекрасно знает. Но, надеюсь, эту недоработку когда-нибудь поправят. Если же вы, к примеру, работаете с базой через свой класс — обертку (или через что-то вроде PEAR), то проблем с IntelliSense не должно возникать.

Один раз у меня случилось так, что при редактировании js файла Komodo не понял, какой Java Script фреймворк я использую. Но это, к счастью, всегда можно поправить в его настройках (Edit -> Preferences… -> Code Intelligence).

Окно настройки, позволяющее указать используемые Java Script фреймворки

Существует платная версия Komodo, называемая Komodo IDE. Как я понял, основное отличие от Komodo Edit в функциях, свойственных многим IDE. Комодо IDE имеет встроенные инструменты для работы с системой управления версиями (SVN) и отладчик кода.

Кстати, в Komodo Edit все же есть примитивный отладчик, который на ходу уведомляет о таких мелких ошибках, как забытая точка с запятой в конце строки, незакрытая скобка и т.п. Такие ошибки он подчеркивает красной волнистой линией. Для того, чтобы такая отладка работала, нужно в настройках программы указать путь к исполняемому файлу PHP и php.ini (Edit -> Preferences… -> Languages -> PHP).

Указание пути к исполняемому файлу PHP и php.ini

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

Послесловие

Komodo Edit теперь мой повседневный инструмент 🙂 Плюс, для коротких правок каких-то мелочей в эпизодических случаях я продолжаю использовать аналог продвинутого блокнота — Notepad++, то есть использую его по своему настоящему назначению.

До Komodo Edit я еще пробовал интересный плагин к Visual Studio, который называется VS.Php. Он встраивается в Visual Studio и позволяет работать с PHP так же, как, к примеру, с C# (можно отлаживать код, работает IntelliSense и т.п.). Но как-то он не особо впечатлил, особенно на фоне своей платности. К тому же, как я понял, работая в нем можно полностью забыть про поддержку Java Script и т.п. Интересно еще то, что в нем точно так же, как в Komodo, не работает IntelliSense для классов, встроенных в PHP. Так же этот VS.Php конфликтует с Visual Assist.

Есть еще два подобных редактора, о которых я слышал, но как-то не случилось их попробовать (дальше лишь ИМХО и догадки на основе «слухов»):

  • Zend Studio – платный, по отзывам сложилось впечатление, что это нечто громоздкое и применимо в первую очередь ну в очень больших и сложных проектах, особенно он уместен, возможно, если проект создается на основе Zend Framework.
  • Eclipse – бесплатный, но отпугнул, скорее всего, своей «накрученностью». Как я понял, его еще нужно уметь собрать под себя из различных модулей. В общем, как-то не возникло желания разбираться с тем, как его установить и настроить (но в свое время я все же пытался немного 😉 ), хотя, несомненно, кому-то он может очень нравиться.

***

Если кто-то посоветует какие-нибудь еще редакторы с оглядкой на мои «придирчивые» вкусы, буду очень благодарен. Так же было бы интересно услышать о каких-то дополнительных интересных особенностях Komodo от тех, кто им уже пользуется.

В общем, долой примитивную подсветку кода с вагоном ненужных функций! Это «наболевший» камень в огород постоянно появляющихся простых редакторов кода, выставляющих на передний план среди своих «достоинств» встроенный проводник по файловой системе или что-то вроде мини редактора/вьювера базы данных (ну зачем это нужно, если нет самых важных вещей именно для того, для чего изначально предполагается использовать редактор кода) и т.п. и т.д.. Почему-то почти каждый начинающий (хотя, может, не всегда начинающий) программист хочет «быстренько» сделать свой «мега» редактор, который часто вырождается в «опять что-то до боли знакомое»… очевидно, это традиция из серии «Hellow World!» 😉

Автор

  • Рекомендую посмотреть VIM. Он позволяет многое настраивать, да что многое — вообще все. Правда у него есть одна тонкость — к нему нужно привыкнуть сборник статей про вим можно посмотреть у меня в блоге http://blog.seo-p.ru/search/label/vim

    p.s. А зачем тебе так требуется работа с JS не ужели у тебя php код и js встречаются в одном месте?

  • Sam

    Самый продвинутый IntelliSense, который я встречал для PHP реализован Eclipse PDT/Zend Studio 6. А вот что касается HTML и JS — тут абсолютно всем IDE очень далеко до IntelliJ IDEA. Жаль, что поддержки PHP там пока нет.

  • Бирц

    [quote]А зачем тебе так требуется работа с JS не ужели у тебя php код и js встречаются в одном месте?[/quote]
    php И js может не часто встречаются в одном месте, но в одном проекте сколько угодно, и прыгать с одной иде на другую не очень радостное занятие. Комодо в этом отношении пока держит пальму первенства.
    Zend IDE хорошая вещь, но только для php, как дело доходит до html и js — все его достоинства испаряются.
    К VIM наверное очень долго придется привыкать, незнаю, но на комод я пересел за пол-часа и не жалею.

  • Программер, у меня точно такая же ситуация с JS как описал Бирц.

    Забыл написать об одной проблеме с IntelliSense для jQuery.
    Если обращаться к объектам через сам jQuery (к примеру через $(«li»)), то Komodo понимает, что это за объект. Если же присвоить указатель (хотя не знаю насколько в JS применим термин указателей) на объект jQuery, в созданную переменную, то комодо заходит в тупик. Вот так:

    var $tmp = $("li");
    $tmp.НИЧЕГО_НЕ_ЗНАЕТ_ОБ_ОБЪЕКТЕ

    Не удобный момент 🙁 Остается надеяться, что когда-то поправят…

    Sam, нигде не нашел упоминания о том, что IntelliJ IDEA поддерживает JS (хотя может не доглядел), везде пишется, что он именно для Java. Или работа с JS там поддерживается как «побочный эффект» и она на самом деле присутствует?

  • vab

    Eclipse + PDT + ZenDebugger|XDebug + FireBug (про Apach, PHP и MySQL молчу 🙄 ). Думаю, это вполне хорошая связка. Говорят есть еще Aptana поверх эклипса для работы с JS, но я пока ее не осилил. Функций Эклипса мне оказаолось достаточно. Ну разве что, для работы со структурой базы я бы поискал какой-нибудь внешний CASE. Кроме того в Эклипсе мне приходится так же много работать с XSD и XSL, а он имеет и для них плагины. И более — он же имеет плагины для работы с Java. Так что, ИМХО он рулит.

  • vab

    Забыл еще про контроль версий. Эклипс имеет плагины для CVS и SVN.

  • воу, там есть автозаполнение — это просто чудо! Спасибо!

  • Synthetic

    ZendStudio IDE (ZDE) — последняя версия 5.5.1. Далее идёт ZendStudio For Eclipse — последняя версия 6.0.1. Оба продукта непосредственно от самих создателей движка PHP Zend. Поверте — за долгие годы программирования на PHP, я перепробывал немеренное количество редакторов кода PHP. И именно в упомянутых редакторах имеется самая полная поддержка IntelliSense. На ходу цепляются все inqlude и require файлы с вашими функциями, классами, переменными и константами. Методы/переменные класса. Описания интерфейсов. Учёт наследования классов и многое, многе другое. И работает это — поверте — ничуть не хуже IntelliSense к примеру для #C в MS Visual Studio. Быстрай переход к месту декларации функции/метода/переменной/класса. Поддержка ZendFramework на уровне модели MVC. Кроме того ввиду нестрогой типизации данных в PHP, возможен вывод подсказок при передаче параметров в функции — их тип и значение по умолчанию, при помощи коментариев в стиле PHPDoc. Ещё стоит отметить полную, не глючную поддержку отладки (Zend debugger). Можно запускать и отлаживать скрипты на удалённых WEB-серверах. А в ZendStudio For Eclipse кроме родного Zend debugger, есть поддержка xDebugger и любых других отладчиков в виде плагинов. Как видно из названия — ZendStudio For Eclipse — по сути ни что иное как Eclipse PDE, только сделанное самими Zend’овцами собственными руками. Что привело к массе дополнительных и в полне полезных функций и инструментов отсутствующих в изначальном Eclipse PDE и работающий на ура. Кроме того сама идеология Eclipse позволяет добавить любые плагины и расширить функционал. Я к примеру прикрутил Aptana и выдернул из Adobe Flex Builder 3 (который тоже на базе Eclipse) его инструменты и «скрестил» всё в один инструмент — всё в одном. Теперь не запуская других прог, делаю тут же проэкты под Flex, Ajax, PHP, ZendFramework и AMFphp. ИМХО лучшего решения пока ненашёл.

  • Synthetic

    Забыл добавить. Для Eclipse PDE имеется плагин — подстветка синтаксиса Smarty. В результате прикрутив и его к Send Studio For Eclipse — получаю ПОЛНЫЙ набор инструментов разработки в одной программе 🙂

  • Уважаемый автор… Пробовал я ставить озвученный редактор Komodo. При запуске жрёт памяти на 20 Мб больше Zend’а 5.5, а при работе ещё сеъдает столько же, сколько при запуске. Следовательно, начинает тормозить. В Зенде оказалось куда приятнее. Хотя если бы не память и кодировка windows-1251, используемая по умолчанию (изменения в настройках не помогли), то я бы использовал Komodo.

  • Кстати, у zend есть приятная фича — работа с бд, очень полезная штука, которой увы нет в комодо, хотя вероятно есть плагин, или может быть создан.
    Скоро будем пробовать zend for eclipse, думаю этот инструмент будет совершеннее.

  • Zend Studio for Eclipse — реально крут.

  • Скачал для тестов NetBeans6.5
    Необходимый, на первый взгляд, функционал присутсвует:
    svn, database manager, javascript, css (для него вообще есть нечто типа визуального редактора свойств).
    Из важных плюсов можно отметить бесплатность. Минимальный комплект для пхп (23мб):
    http://www.netbeans.org/features/php/index.html
    Требует Java sdk 5 или выше. Можно скачать полную комплектацию, более 200 мб.

  • Бирц
    Меня vab уже «совратил» на скачиваине zend for eclipse 🙂 Тоже буду пробовать скоро.

    А NetBeans использую для Ruby on Rails, в этом плане он отличен, для пхп как-то не охота его пока пробовать нормально, почему-то.

    Nikita
    У меня как не странно komodo один из самых шустрых среди других подобных программ (и впечатления о нем как об шустрой программе). Тот же NetBeans со своей ява-машиной, отъедает у меня куда больше памяти.

    Synthetic, спасибо за такой подробный комментарий! Я отчасти из-за него начал задумываться о эклипсе 🙂

  • 2ezoterik — попробуйте PHP Expert Editor
    http://www.ankord.com/ru/phpxedit.php
    Не такой меганавороченый (тормозной 🙂 как монстры типа Eclipse, все нужные фичи есть. Для русскоязычных бесплатен.

  • SciTE и больше ничего не нужно. Сборка от RuTeam полностью покрывает 90% запросов программиста PHP. Всё остальное можно быстро дописать самому за счёт использования Lua внутри редактора (кстати, Notepad++ на том же движке, кажется). Кроме PHP так ещё штук 20-30 бандлов.

    Intellisence в стандартной поставке не плещет через край, но минимальный набор удовлетворяет. Повторюсь, остальное дописывается через Lua.

  • Владимир

    NuSphere PhpEd — самая мощная PHP IDE, которую я знаю.

  • Алешка

    http://www.aptana.com/air/ юзаем это для Zend Studio i5

  • Z0RG

    Все эти громадные редакторы. Я бы даже сказал среды разработки конечно хороши, но невероятно тяжелы, как в плане веса, так и в плане поедания ресурсов. Использую уже довольно давно Notepad++ с несколькими плагинами и вполне себе доволен. 🙂

    NetBeans написан на Java и как мне показалось довольно медлен и неповоротлив.

  • PHPEdit очень неплох. Если буду легализовать используемое ПО, то перейду на него с Zend’a.
    Минус для меня (но не критичный) — кодфолдинг по нажатию на ctrl-пробел. В Zend’e по ходу набора классов/методов — удобнее.

  • Не кодфолдинг, а дополнение кода. Перепутал малость.

  • Пипец, вас тут послушаешь и вывех мозга получишь.
    Так какой editor лучше для новичка и при этом что бы контролировать весь процесс вплоть до пробела?

  • DuH

    Подскажите такой вопрос: пытаюсь настроить в Komodo Edit подсветку — что-то не пойму, как сделать отдельное выделение фукций. Например чтобы функция intval отделялась от ее опечатки intvl.

  • Я пользуюсь php edit. самый удобный

  • нико

    попробуйте http://www.nusphere.ru
    потом будет за уши не оттащить 🙂

  • phped fan
  • нико, phped fan, можно и попробовать 🙂

    Сейчас перешел полностью на NetBeans и пока не встречал ничего более подходящего для меня, даже сравнивая с платными аналогами (я постоянно параллельно пробую разные редакторы).

    UnknowN, в таком ключе лучше начинать с Notepad++ (я вполне серьезно) Вообще в начале лучше начинать не с того, что делает «половину» работы за тебя.

  • Владимир

    CodeLobster PHP Edition 3.5 Мне очень понравился, жаль русского нет. Может кто нибудь знает где можно найти русифицированную версию?

  • Всё прочитал, кучу чего скачал, в настройках плохо ориентируюсь, но на Komodo Edit могу печатать на 3-х языках в unicode и html-файлы правильно отображает.

  • hex

    я вот доверяю phpDesigner 7.2.1 и всем доволен

  • j4d

    а чем PHP Expert Editor не угодил? бесплатен, удобен.

  • Dop

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

    спсибо!

  • Алекс

    Установил себе Php eclipse только не могу найти folding div тэгов как делать, как в Komodo фолдинг
    Подскажите это возможно сделать?

  • Алекс

    та уже не надо… потому, что я установил себе netbeans 7(dev. vers.) там вроде есть всё, что надо

  • smertnik77

    лучший Notepad++ !!

  • smertnik77, Для быстрой правки однозначно да 🙂

  • Oleg

    PhpStorm однозначно вставляет все IDE для PHP!

  • Я пользуюсь Codelobster PHP Edition (http://www.codelobster.com)
    Это бесплатный редактор — а по мне так лучший из всего, что я видел.

  • Oleg, на вкус и цвет… Я уже два раза пытался им пользоваться, не пошло. Плюс там были замечены проблемы с тем, что он не очень корректно «понимает» всю глубину наследуемых классов при переопределении методов «предка предков».
    Пока лучше netbeans для себя ничего не нашел (а после опытов с, как говорят, лучшим PhpStorm, сомневаюсь, что найду, и что в ближайшее время стоит искать)…

  • Как оп мне очень удобный это NetBeans постоянно развивается, бесплатный, быстрый и удобный. Однако как говориться на вкус и цвет фломастеры разные

  • cosmos

    по поводу netbeans не могу найти как посомтреть дерево функций в файле или список методов в классе
    в komodo было очень удобная штука Source tree а в этом не могу найти

  • cosmos, так есть это (или может я не правильно понял о чем речь). Панель Projects слева (может вы ее закрыли случайно, через меню Window тогда можно вернуть ее), она разделена на две части, в верхней части файлы проекта, а в нижней части дерево функций текущего открытого файла или же текущего выделенного файла в верхней части.

  • Mvinner1982

    Попривыкали к мега-редакторам, где всё на блюдечке показывает, чуть ли не вплоть до определённых ранее методов с аргументами или свойствами собственных объектов, а потом точно что, за уши не оттащишь 🙂
    Да, они (IDE) удобны, но если после них вы не можете свободно, без капризов написать код в блокноте, тогда, по-моему, среда породила плохие привычки.
    Почти все «навороты» рассчитаны на то, чтобы направить кодера на правильный путь и не дать ему совершить ошибку до интерпретации кода.
    Как правило, ошибки в коде возникают из-за не внимательности (или кратковременной её потери). Здесь приходит на помощь подсветка синтаксиса, а при правильной организации проекта, имен классов/переменных/объектов и проч. — проблем в путанице не должно возникать. А если ещё заранее определять доступность методов/свойств/наследования и типы агрументов — так вообще на мину не ступишь! Лукавлю — наступишь на предупредительное сообщение после интерпретации, если ранее не изучил код (если он чужой).

    Сам пишу в SciTE. Для тех, кто в танке: SciTE — это такое средство для поддержания памяти (своей и машины) в тонусе!

    • Если в таком русле продолжить рассуждать, то и машины к черту, а то привыкли ногами не ходить… телефоны, email (переходим к голубиной почте и письмам написанных на бумаге)… и самолеты, и вообще все блага цивилизации. Они все ведут к «ожирению» как тела так и мозга 🙂 Мне кажется, что без IDE просто не реально работать с действительно большими проектами и чаще всего предпочтения в редакторах формируются как раз из необходимости работы над такими проектами. Точнее реально работать, но намного дольше и рутиние (кстати, ООП тоже в топку, все эти красивости и удобства не к чем…), вспомнил как лет 5 назад, мне один человек рассказывал, что фотошоп отстой, так как есть Paint, где этот человек может сделать все, что только пожелает (и возможно может, но по большому счету это «мартышкин труд» или своеобразное искусство, на манер ASCII графики)… Собственно, наверное, каждый выбирает инструмент который помогает решать конкретно его задачи наиболее эффективно.

  • Mvinner

    На мой взгляд, » …все эти красивости и удобства…» любезно посланные в топку :-), и которыми пользуются ООП-шники, как раз и должны заменять большую часть удобств от средств IDE, т.к. иными словами, предыдущий мой пост говорит о том, что в ООП сам прогер создаёт удобство кодирования, а не среда разработки. Конечно, IDE существенно освобождает память кодера, подсказывает, особенно помогает, если забыл метод и прочее чужеродного класса при коллективной разработке. Но повторюсь, все основные удобства у ООП-шника уже есть — в голове 🙂

  • Eugene Makarov

    Существует ли в Komodo форматирование кода, чтобы красиво автоматом расставил все табы и отступы.