MaxSite.org
Всё о создании веб-сайтов

IDE для PHP

Софт
IDE для PHP

К вопросу выбора IDE для PHP меня подтолкнуло программирование на Java. Как я уже отметил ранее, для Явы существует неплохой выбор программ. В частности я пока использую IntelliJ IDEA и, честно говоря, я был удивлён, насколько серьёзно продвинулись подобные программы. Много лет назад я публиковал статью IDE для PHP на примере Notepad++, которая не потеряла акутальности, хотя по современным меркам Notepad++ — это обычный текстовый редактор с массой приятных «плюшек».

IntelliJ IDEA меня приятно удивила своим «интеллектом». Java очень уж «многословна»: код откровенно излишний и достаточно громоздкий. Было непонятно: неужели java-программисты его пишут вручную? Запомнить все функции, пакеты и прочие языковые возможности совершенно нереально. Это не PHP, который изучается по справочнику с php.net. На практике оказалось, что IntelliJ IDEA сокращает написание кода до примитивного выбора функций из подсказки автодополнения. IDE автоматом отслеживает код и предлагает советы по его написанию, например добавление в import.

И совсем меня поразила возможность статического анализа кода — это когда IDE проверяет код прямо в процессе его написания. Отмечаются проблемные места, скажем неиспользуемые переменные, или подсказки по области видимости и т.п. В PHP такие вещи крайне ограничены — разве что запуск php с флагом «-l»... Тут же получается очень много точных и конкретных подсказок вплоть до полного переформатирования участка кода.

На этой волне я и решил узнать, есть ли подобные IDE для PHP-кодера.

Сразу хочу сделать ремарку. Это не полноценный обзор программа и не их тестирование. Так что холивар здесь ни к месту. Я поставил очень простые задачи, которые типовые в работе php-программиста, и попробовал проверить как IDE с ними справляются. Более того, я допускаю, что просто не смог разобраться с программами: будем считать это тестом на порог вхождения. :-)

За «нулевую» точку я взял Notepad++, поскольку он предлагает минимально возможный функционал: подсветка синтаксиса, автодополнение, навигация, шаблоны кода, макросы/запуск программ/задач и т.п. То есть любая IDE должна иметь функционал больше этого. Иначе какой в ней смысл?

Программирование PHP неразрывно связано с работой HTML, CSS, Sass/Less файлами. Поэтому IDE должна их тоже понимать и предлагать не просто подсветку синтаксиса, но и находить ошибки. Ну и конечно, должна уметь «разгребать» смешанный код, например html в php или css в html.

Другой важной особенностью будет то, что обычно php-проект не имеет четкой структуры каталогов, как например в Java, где вся программа в одном месте. В PHP проект может быть в совершенно разных местах.

Например редактирование шаблона в MaxSite CMS. Сам php-проект будет в каталоге templates/default (для default-шаблона), но при этом он может использовать функции из common. IDE должна иметь какую-то возможность искать функции из common-каталога в текущем проекте.

Только бесплатные программы

Я тестировал только бесплатные IDE. Из платных я бы отметил пожалуй PHPStorm, которая базируется на IntelliJ IDEA, поэтому возможно так же «умна» как и версия для Java. Стоимость PHPStorm довольно высока, тем более, что лицензия действует только один год. Лично для меня платить за такой возможный(!) функционал дороговато.

Что я делал

Во всех случаях я делал очень простую вещь: открывал default-шаблон из MaxSite CMS в виде отдельного проекта. Дальше я открывал php-файлы проекта и первым тестом пытался проверить работу автодополнения. Например в MaxSite CMS есть функция mso_xss_clean — я набираю mso_xи программа должна высветить подсказку с этой и похожими функциями.

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

AptanaStudio и Eclipse

Обе программы построены на базе Eclipse, поэтому у них идентичное поведение. Для Eclipse нужно предварительно поставить PHP-плагины или скачать соответствующую сборку. AptanaStudio уже настроена.

В обоих IDE тест на автодополнение провалился. Программы не видят файлы MaxSite CMS.

При том видят функции заданные в этом же файле:

Но, если попробовать вызвать функцию из соседнего файла проекта, IDE опять «слепнет»:

То что программы не видят файлы MaxSite CMS в целом нормальное поведение — они же не знают откуда его взять. Поэтому в теории должен быть механизм, позволяющий указывать в проекте путь или дополнительные файлы. К сожалению в Eclipse этого нет (или я не нашёл как сделать), а без этого IDE в этом плане мало чем отличается от Notepad++.

Кроме этого в Eclipse не позволяет работать с scss-файлами — нужно устанавливать дополнительные плагины. Вместо открытия файла, программа открывает другую связанную программу, в моём случае Notepad++. AptanaStudio работает уже нормально.

Atom

Эта программа уже видит все объявленные и используемые функции внутри файла. Точно также ведёт себя Notepad++.

В соседнем файле эти же функции доступны при условии, что одновременно открыты оба файла.

Если при этом открыть common.php, то станут доступны и функции из этого файла.

Таким образом в Atom'е функции для автодополнения доступны из всех одновременно открытых файлов, не зависимо от их реального расположения. Если файл закрыть, то его функции станут недоступны для остальных. Для небольших проектов IDE это не должно быть проблемой, но там, где файлов больше десятка, пользоваться программой будет уже не удобно.

Visual Studio Code

Программа от Microsoft полностью провалила тест на автодополнение. Функции видны только в пределах открытого файла (поведение Notepad++).

Соседний файл уже ничего не видит. Функции MaxSite CMS, естественно, недоступны и каких-то настроек это изменить я так и не нашёл.

Я допускаю, что Visual Studio Code нужно как-то настраивать для работы с php-проектом. Программа поддерживает плагины. Я попытался найти что-то связанное с php, но количество предложений меня сильно смутило — всё-таки разобраться с 133 плагинами довольно проблематично. :-)

KDevelop

Программа, судя по всему, в первую очередь ориентируется для С/C++, а PHP для неё — небольшое дополнение. Поведение автодополнения достаточно интересное. В первую очередь следует отметить, что php-функции доступны сразу из всего проекта для всех файлов. Функции MaxSite CMS при этом недоступны. Но, если открыть (можно простым перетаскиванием мышью) файл common.php, то KDevelop, после небольшого анализа, делает его функции доступными для всех файлов проекта.

При этом, даже если закрыть common.php, или сам проект, то после открытия функции останутся доступными (они добавляются как Imports).

При этом в KDevelop отлично работают подсказки по функциям в двух вариантах: в кратком и полном. Так что эта IDE тест на автодополнение пошла очень хорошо.

Но, из-за того, что программа заточена для «сишников», в ней нет средств для статического анализа кода.

Выглядит это очень печально — php-ошибки программа просто не видит. Так же программа ничего не подсказывает относительно Sass-файлов и css-классов.

NetBeans

Автодополнение в NetBeans видит сразу все функции проекта.

Для того, чтобы IDE увидела функции MaxSite CMS необходимо добавить к проекту соответствующие пути:

После этого в проекте становятся доступны все функции.

Стоит отметить, что NetBeans понимает синтаксис PHPDoc, что делает автодополнение отличной подсказкой:

Смешанное содержимое: php-файл, в котором html-вставка, в котором css-класс, который определён в scss-файле.

Если css-класс определён в «чистую» в css или scss-файле, то NetBeans легко его находит.

Так что в плане автодополнения NetBeans показала себя только с лучшей стороны.

Теперь, что касается статического анализатора кода. Да, он есть. С учетом того, что это PHP с его «вольностями», работает он даже лучше чем стандартный php -l. Анализ кода производится средствами самой программы, поэтому она может отловить не только ошибки, но и различные неточности.

В некоторых случаях IDE даже слишком перестраховывается, например присваивание в теле условия «if» формирует предупреждение о «возможно случайном присваивании». Или, скажем, программа настаивает на том, что все if-блоки должны оборачиваться фигурными {}скобками. Хорошо, что всё это настраивается.

Так что и в этом вопросе NetBeans показала себя с лучшей стороны. С учётом других возможностей программы, можно сказать, что NetBeans — однозначный фаворит при выборе IDE для PHP.

Оставьте комментарий!

Комментарий будет опубликован после проверки. Вы соглашаетесь с правилами сайта.

(обязательно)