Избор на редактори / IDE-та за PHP, HTML, изображения или "Майсторът се познава по инструментите"

Публикувано / posted 2009-10-06 в категория / in category: PHP, Инструментите на занаята
  

php_nekoiС годините работата на PHP програмистите започна да става все по-сложна и обемиста. Ако едно време обичайния проект беше да се направи проста регистрационна форма и няколко динамични странички и всичко това подплатено с 4-5 DB таблици, то днес нерядко се сблъскваме с проекти, които имат 30-40 форми, 50-60 динамични страници, 30-40 DB таблици, cron job-ове, ajax-и, CVS-и, XML-и и т.н. Накратко казано: нещата загрубяха и вече не можем да си позволим да губим време за глупости. Един от проблемите, който забелязвам доста често е, че много developer-и използват "кекави" текстови редактори за работа с PHP код и по този начин си "спестяват" възможността да си ускорят работата, като едновременно с това я направят по-лесна и като страничен резултат -- по-качествена.

Има един принцип в удобството за използване и той гласи "На човек най-удобно му е това с което е свикнал". Макар, че е донякъде казано на майтап, всъщност, до голяма степен това изречение описва защо много хора са изключително негативно настроени към смяна на редактора, който използват. Когато си "копал" примерно  UltraEdit в продължение на 2 години после и най-доброто IDE като Zend Studio Client ти се струва тегаво и досадно и трябва да мине поне месец, за да свикнеш с него. Една от най-добрите мотивации, които може да получи човек за смяна на досега използвания продукт е да липсват в него полезни / удобни функции, които са налични в друг. По-долу ще бъдат изброени различни продукти заедно с кратко описание на "изкушенията", които могат да ви накарат да си "смените вярата".

1. Редактори / IDE-та за PHP

Когато по-горе споменах за "кекави" текстови редактори, имах предвид такива, които общо взето предлагат само две благини (разгледано стриктно от гледна точка на PHP програмист): синтактично оцветяване; автоматично допълване на имената на вградените PHP функции (и евентуално показване на списъка с параметри). Макар и двете да с много полезни, всъщност, към днешна дата, представляват санитарния минимум, който е необходим за работа. На другата крайност е Zend Studio -- в него има повече, отколкото вероятно ще използвате.

Основните благини са:

1.1. Работа с проекти

Докато при старите текстови редактори, за да отворите даден файл трябваше да дадете File->Open (или да използвате съответния съответния шорткът), после да навигирате до дадена директория и там да си избирате необходимия файл, то в по-новите можете да дефинирате проекти и към тях да закачите директориите, които ви трябват. Те се появяват във вид на tree-view и можете и е много по-лесно да се навигира в поддиректориите:

zend_tree_view

Концепцията, естествено, не е нова -- всеки го е виждал в Windows Explorer-а, а също и в IDE-тата на други езици като C и Java, но тъй като липсва в по-елементарните текстови редактори е важна да бъде отбелязана, туй като, колкото и странно да звучи, води до намаляване на бъговете. Да си представим следната ситуация: Използвате прост текстов редактор, който не дава възможност да добавяте към проекта избрани от вас директории. Всеки път, когато се наложи да отваряте файл трябва да преминете през времеотнемаща и отегчителна навигация и това естествено е досадно и гледате да си го спестявате. В един момент, обаче, както си пишете код се налага да проверите в друг файл дадена функция какъв точно масив връща. Вие имате представа, горе-долу, какъв е, но не сте съвсем сигурни. От мързел обаче решавате да не губите време да отваряте файла и написвате кода, както предполагате, че трябва е. Тествате нещата и се оказва, че не сте били прави и щете-нещете минавате през търсенето и отварянето другия на файл, преправянето на кода и т.н. Поели сте неоправдан риск -- ако печеля -- спестявам 10 секунди, ако губя -- губя 20 секунди. Това не е програмиране -- това е хазарт. Още по-лошото е, дори когато уж печелите е възможно всъщност да загубите -- поради природата на PHP-то (липса на стриктна проверка на типовете) е напълно възможно да понацелите нещата (примерно структурата на върнатия масив) и теста да мине (защото е бил непълен), но след време вече, точно в най-неудобния момент, този бъг да се прояви и да загубите часове да търсите къде и какво се е объркало.

Гореописания сценарий не е художествена измислица. Аз лично съм минавал стотици пъти през него по времето, когато използвах UltraEdit. Ако някой ден напиша книга "Как да залагаме бъгове, които се активират в зависимост от фазите на луната" ще го използвам за централната сюжетна линия ;-).

Удобството за намиране на необходимия файл придобива все по-голямо значение напоследък с навлизането на все повече библиотеки и framework-ове -- количеството на файлове в даден проект вече е огромно. Ако едно време най-много да плеснем един PHPMailer, то сега обичайния проект може да включва: Zend framework, SWIFTMailer, Smarty, ADODB, Prototype JS и т.н.

За редактиране на PHP аз лично използвам Zend Studio Client 5.5, но за съжаление това е платен продукт. Безплатна алтернатива е PHP Development tools (PDT), но поне навремето (преди 1,5 год) като го тествах не беше на нужното ниво. Последната версия на Zend Studio e 7.0 и трябва да се отбележи, че е изградена върху PDT, което всъщност е плъгин за Eclipse. Напълно възможно е PDT вече да е добър и зрял продукт.

1.2. Дебъгер

Вероятно това трябваше да е първа точка, но поне според мен има причина да не е -- за това малко по-надолу.

Колкото и да сме добри програмисти се случва да залагаме бъгове и това е неизбежно. По дебелите книги пише: Средното време за корекция на бъг се разпределя така: 90% отива за откриване и диагностициране и 10% за фактическата корекция. В този ред на мисли можем да кажем, че с цел намаляване времето за корекция на бъг най-голям принос може да има бързото откриване и точно тук на помощ идва дебъгера.

За огромно съжаление има немалко PHP програмисти, които не са виждали дебъгер. Това обикновено са хора на които PHP-то им е пръв и единствен език. За останалите -- знаете за каква разкошна благина става дума, но вероятно не сте знаели, че има дебъгер и за PHP. И така: дека е дебъгера? Всъщност Zend Studio-то се състои основно от две неща: Zend Studio Client (ZSC) и Zend Studio Server (ZSS). За да имате истинско дебъгване е необходимо на Web сървъра да се инсталира Zend Studio Server. Той се интегрира с PHP и осигурява комуникацията с дебъгера, който се намира в Zend Studio Client. Реално Client-a може да дебъгва и локално, без инсталиран ZSS, но има доста ограничения и поне според мен е почти напълно безполезен в този режим.

Дебъгера за PHP предоставя всички възможни функции като: breakpoints, watches, Step Into, Step out, Step over, Go to cursor и т.н. Изключително полезен е, когато се налага да разучавате чужд код -- много по-бързо човек може да се ориентира кое за какво е и каква е структурата на приложението.

1.3. Допълване на имената на функции, класове и методи дефинирани от потребителя

Един от недостатъците в повечето редактори за PHP е, че предлагат допълване на имената и параметрите (това, което обикновено става с Ctrl-Space) единствено за вградените PHP функции. За разлика от тях Zend Studio Client предлага възможността да допълвате имената и на функции, класове и методи дефинирани от вас (или някой друг), което е изключително полезно когато работите с PHP библиотеки или framework-ове. За да "знае" с какво трябва да допълни ZSC, най-грубо казано, парсва всички PHP файлове към даден проект и си изгражда вътрешна база данни с потребителските класове и функции.

На някой тази функционалност може да не се струва важна, но на мен лично ми "спасява живота". Моят Tangra Framework for PHP съдържа над 200 класа със сигурно повече от 2000 метода и просто няма начин как да помня на всеки името и параметрите.  Отделно използвам много външни библиотеки и там вече кашата става пълна с техните различни конвенции за имената…

Една много полезна функционалност за тези, които пишат на PHP5:

Имаме примерно клас User и:

$u = new User();

$u->

ако след -> натиснем ctrl-space ще ни излезе списък с всички методи на този клас.

Ако имаме:

$u->get_[ctrl-space]

ще ни излезнат всички методи имената на които започват с "get_".

1.4. Шаблони от код

Шаблоните от код представляват нещо много просто и много полезно. За често използваните фрагменти от код можете да си дефинирате шаблон -- paste-вате вътре кода, давате му име и после в редактора като му напишете името, ctrl-space и се появява кода. Един пример:

dbct[ctrl-space]

и на него място се появява:

try {
$dbc->start_trans();
$dbc->complete_trans();
} catch (Exception $e) {
$dbc->fail_trans();
$dbc->complete_trans();
throw $e;
}
try {

$dbc->start_trans();

$dbc->complete_trans();

} catch (Exception $e) {

$dbc->fail_trans();

$dbc->complete_trans();

throw $e;

}

1.5. Сгъване на код (code folding)

Тази функция е същата като в IDE-та за други езици. Когато работите с големи файлове ви позволява да "свивате" методите, които не ви интересуват и да останат отворени само тези, които ви трябват:

zend_code_folding

В изображението отгоре се вижда, че метода __construct е "свит" и има плюсче пред него. При кликане на плюсчето ще се разтвори. Обратно при кликане на минус -- метода се "сгъва".

Освен ръчното "сгъване/разгъване" Zend Studio Client предлага и следните автоматики (чрез Edit->Code folding):

  • Collapse all non-PHP -- свива всичко, което не е PHP код;
  • Collapse all classes -- свива всички класове, но stand-alone функции си остават отворени;
  • Cоllapse all functions
  • Collapse all DocBlocks -- свива всички phpDoc коментари (/**)
  • Expand all folds -- разгъва всички сгънати;
  • Collapse all folds -- сгъва всички класове, методи, функции и коментари.

1.6. Анализ на кода

ZSC предлага функцията Tools->Code analyze, която анализира вашия код и дава предупреждения за неизползвани променливи и разни други потенциални бъгове. Много е полезна, когато трябва да редактирате стари файлове на които са се изредили няколко поколения maintenance програмисти. Пуснете я на такъв и вижте само колко "лайна" ще изкара.

1.7. Други

Тук се сещам за няколко неща, които са налични дори в по-простите текстови редактори, но има случаи в които липсват, затова ще ги спомена:

  • reopen files on start -- При тази функционалност редактора "запомня" кои файлове са били отворени при затварянето му и при следващото стартиране ги отваря автоматично. Важно е да ги отваря в същия ред (има редактори, които не го правят). Не е кой знай каква благина, но си е приятно сутринта като си пуснете редактора да се отворят нещата както сте ги оставили вечерта. Най-малкото по-лесно ще ви е да се сетите докъде сте били стигнали;
  • табове с отворените файловете. Повечето редактори го имат това, но го споменавам, защото преди няма и три месеца видях един пич, който беше добър PHP програмист, но използваше някакъв шит, при който трябваше да се минава през window->, за да се превключват файловете. Той използваше, разбира се, шорткът, но пак ми се струва адски неудобно ако трябва да се работи с повече (10+) файлове едновременно. Сигурно е добър тренинг за паметта, но не мерси…
  • интеграция със CVS, SVN -- в по съвременните IDE tree-view-то с файловете позволява директна работа с CVS/SVN -- можете да комитвате и revert-вате директно от него; показва файловете, които имат нужда от commit в друг цвят и прочее благини.
  • read only / protect file -- това е една функционалност, която липсва в ZSC, а ми вършеше много добра работа в UltraEdit. С нея можете да кажете, че даден отворен файл е read-only или protected и редактора не ви позволява да пишете в него. Полезно е когато имате отворени много файлове и можете да се защитите от промяна в грешния файл (случва ми се редовно, особено в модулите на Tangra framework, когато имам отворени инсталационен и инсталиран файл и по погрешка редактирам инсталационния).

В заключение: вероятно има и други IDE-та, които са не по-малко удобни и функционални от Zend Studio Client, но поне за мен по-добър няма. Срам не срам трябва да призная, че все още работя със стара версия (5.5), а вече са стигнали до 7.0. Причината за това е, че новия ZSC плъгин за Eclipse, а преди с него имах страшно много проблеми и още ми нагарча в устата. В интерес на истината, към днешна дата Eclipse е един много зрял проект и по всяка вероятност бъговете от едно време вече отдавна са оправени.

Като безплатна алтернатива на ZSC можете да използвате PDT. Откровено казано -- не съм го тествал отдавна, но ще се насиля някой път да го прегледам и да напиша едно ревю за него.

[Редакция 2011-05-27] След като мигрирах на Windows 7 се оказа, че Zend Studio Client 5.5 не тръгва. Въпреки прилагането на разни хакове не успях да го подкарам и се наложи да инсталирам Zend Studio 8, но го разкарах след около месец -- просто проблемите бяха прекалено много. Последната версия на PDT беше същото лайно и в крайна сметка се спрях на NetBeans. Вече го използвам повече от 3 месеца и съм доста доволен (имам някои леки забележки, но те са пренебрежими).

[Редакция 2011-09-11] След като видях, че е излязло PDT 3.0 реших да го изпробвам и в крайна сметка зарязах NetBeans-а и сега съм с Eclipse Indigo + PDT.

2. Редактор за HTML

Макар че ZSC предлага възможност и за HTML редактиране, аз използвам Macromedia (Adobe) Dreamweaver защото:

  • има най-бързия и удобен Find & replace, когато става дума за работа с много файлове едновременно. В интерес на истината използвам го за F&R дори за PHP код -- примерно, когато съм решил да сменя името на даден клас и искам всички обръщения към него да използват новото име;
  • предлага wizard-и за HTML код примерно вмъкване на таблица с еди колко си редове и колони. Подобни дреболии ускоряват работата и ви пестят досадно писане на <td>, </td>, <td>,</td> (прочете го на глас, ще прозвучите като влак ;-))
  • има доста добро допълване на html таговете, техните атрибути и entities;
  • има вградени хелпове за HTML таговете и javascript;
  • има Apply Source Formating -- подравнява йерархично html-а. Много полезно когато използвате template engine и html за страницата се композира от няколко отделни файла;

Недостатъци:

  • няма работа на ниво проект, т.е. няма възможност да добавите няколко директории към проекта.

Важна забележка: Dreamweaver-a трябва да се използва единствено в режим code view. Както един колега обичаше да казва: "Няма по сигурен начин да разбера, че някой е ламер от това да го видя, че работи с Dreamweaver в design view". Майтапът настрана, но наистина, за да имате пълен контрол над HTML-а -- използвайте единствено code view. Да не говорим, че ако използвате template engine то design view-то до голяма степен се обезсмисля, поради наличието на tpl тагове (които насират всичко).

3. Бърз текстов редактор

От време на време се налага да се отвори някой огромен лог файл (30+ MiB) или CSV дъмп. Ако го направите с ZSC или някой друг тежък редактор вероятно ще се наложи да поизчакате, което си е досадно. За такива случаи е добре да имате под ръка бърз текстов редактор от типа на UltraEdit. Други предимства на този тип редактори:

  • наличие на regular expressions при find и find & replace;
  • шестнайсетичен режим, за да се почувствате по-програмисти. На сериозно -- удобно за откриване на BOM сигнатури в началото на UTF-8 файлове, а също и кирилски букви, където не им е мястото.
  • под Windows лесно се отварят файлове с имена от типа на .htaccess (т.е win-a не ви пита с какво да го отвори, защото не познава разширението, а си давате десен бутон->Open with UltraEdit (той си се интегрира в "shell-a"))
  • можете да го използвате за временно място за paste на код и така няма да си замърсявате основното работно пространство в IDE-то.

Общо взето използвам обикновен текстов редактор за всички файлове, които не са PHP или HTML.

4. Редактиране на изображения

Често се случва от криворазбрана професионална гордост някои хора да нямат инсталиран графичен редактор. Обикновено се чува нещо от сорта: "Аз съм програмист, а не дизайнер. Няма да оправям картинки".

Хм, донякъде това е така, но все пак аз лично предпочитам да имам такъв под ръка, най-малкото, за да не ми се налага да се разправям с дизайнери, когато се наложи да се центрира някой текст на бутон или подобна дреболия, която ще я свърша за 20 секунди.

Реално погледнато, поне в моя случай, няма как да мина без графичен редактор, защото предпочитам сам да си "режа" дизайните.

Тук може да стане разкошен флейм за това, кой графичен редактор е по-добър / по-подходящ: Photoshop, GIMP или Fireworks, но аз лично съм се спрял на последния. Photoshop-a е доста тежък, GIMP-а навремето беше доста бъгав…

Заключение

Всеки човек си има различни предпочитания, пристрастия и "исторически наслагвания". Продуктите, които съм изброил по-горе показват моите, но в никакъв случай не искам да ги натрапвам -- всеки е свободен сам за себе си да прецени какво му е най-удобно. Основната цел и идея на този постинг е да бъде полезен на хората, които все още се мъчат с "кекави" текстови редактори, да им бъде показана алтернатива и да се изкушат от нейните предимства достатъчно, за да имат желанието да изпробват нещо ново.

Отделно: възможно е да има и по-добри / удобни продукти, за които просто аз да не знам. Ще се радвам в коментарите да споделите вашите предпочитания и причините за тях.


2 Responses to “Избор на редактори / IDE-та за PHP, HTML, изображения или "Майсторът се познава по инструментите"”

  1. Румен says:

    Здравейте OGRE,

    Много ми беше полезно да прочета Вашите съображения. Благодаря !
    30-тина години се занимавам с ERP/CRM-подобни софтуери. ПОследните 10-тина предимно като софтуерен архителкт и проектант, но нещо ни фалираха клиентите в транспорта и трябва да пренасочим дейността. Оказа се, че съм един от малкото притежатели на европейски патент в BG. Подадох проект и сега чакам финансиране по ОП Конкурентоспособност. Ще ми се да огледам това тайнство -- web и PHP-материята. Прехвърлих 1-2 книжки за html, xml и PHP та ме сърбят ръцете да спретна първи сайт. Направих опит да инсталирам това-онова, но се оказах много жалък юзер. Моля за 1-2 часа консултации за да заредя лаптопа с най-нужното.

    С пожелания за успех: Румен
    ПП:При дистанционно консултиране, имам готовност за предварително плащане.

  2. Огнян says:

    @Румен
    Отговорил съм ти на email-a.

Leave a Reply

Notify me of followup comments via e-mail. You can also subscribe without commenting.

Внимание: Моля, въведете само ПЪРВИТЕ ТРИ цифри от картинката
Important: Please enter just the first three digits from the image