Favoriete IDE voor onze back-enders: PhpStorm!

Door Sam de Poorter, back-end developer
10 april 2015 - 4261 x bekeken - Categorie├źn: Tech

Een Integrated Development Environment (IDE) is een belangrijke tool voor iedere developer. Als je naar het grote aanbod kijkt, is het soms moeilijk om te kiezen. Bij E-sites wordt er steeds vaker gekozen voor PhpStorm. Ook de rest van de (zakelijke) markt kiest vaker voor deze IDE. Wat heeft PhpStorm jou als developer te bieden?

Populariteit van diverse IDE's

Figuur 1, resultaten van het onderzoek onder de bezoekers van sitepoint, over wat hun (favoriete) IDE is

Ondersteuning van programmeertalen/frameworks

Het eerste positieve punt, is de brede ondersteuning van PhpStorm voor webdevelopment. Denk hierbij aan syntax-highlighting, code-formatting (ook complete XML's), auto-aanvullen, uitgebreid refactoren en daarnaast specifieke ondersteuning per onderwerp. 

  • Frameworks/CMS'en als Zend, Magento, Symfony 2, Yii,  Drupal, Wordpress, Laravel, Behat(testing framework)  maar ook front-end frameworks zoals Angular Js en Node.js.
  • Template-engines als Smarty, Twig, Jade en Blade (Laravel);
  • (my)Sql (hier kom ik uitgebreider op terug bij features);
  • Uitgebreide HTML (hier kom ik uitgebreider op terug bij features) en xPath;
  • Ondersteuning en live gebruik van PHP Code sniffer, PHP Mess detector en PHPunit;
  • Integratie Subversion: Mergen, conflicts resolven, updaten, commiten, reverten, annotaten, history browsen, vergelijken met branches en meer;
  • Ondersteuning voor tools als Composer, Phing en Vagrant;
  • Ondersteuning voor testen: xDebug, Behat(testing-framework) run en analyze tool voor PHPUnit maar bijvoorbeeld ook Unittest voor Javascript;
  • Ondersteuning CSS, zoals autoaanvulling in templates. Maar ook ondersteuning voor predecessors als Sass, Less en SCSS. Ook auto-minifying van een bestand bij aanpassing van het bijhorend CSS-bestand kan makkelijk worden geautomatiseerd. Dit is ook slim te combineren, als je een Less bestand aanpast, wordt het CSS bestand opnieuw (geminified) gegenereerd;
  • Bash-, SSH-m FTP en  Google app engine-support.
Dit is zeker niet de gehele lijst aan wat native wordt ondersteund. Als je iets mist in deze lijst, dan is de kans groot dat het via een plug-in wel beschikbaar is.

Instellingen

Figuur 2, settings van PhpStorm

De settings in PhpStorm zijn uitgebreid, maar wel goed afgekaderd. Binnen settings beschik je over een zoekfunctie (figuur 2). Als je hiermee zoekt op een term als 'sql', krijg je alle onderwerpen die daar gerelateerd aan zijn. In figuur 2 is 'keymap' geopend waarin je short cuts aan acties kan toewijzen. Deze keymaps helpen ontzettend bij het versnellen en professionaliseren van je werkproces. Al vlug voel je je een poweruser en daardoor maak je merkbaar veel minder gebruik van je muis.

Live templates

Figuur 3, links de shortcut zendmail en rechts wat er gebeurt als je op 'tab' (instelling die gewijzigd kan worden) drukt om aan te vullen. 

Buiten het sterke contrast door het verschil in thema's in Figuur 3,  zie je nog een veelgebruikte feature die veel IDE's tegenwoordig bieden; live-templates. Dit betekent dat je zelf een short cut kan definiëren, die uitgebreid wordt tot een groter code-block. Native zit er al een aantal in PhpStorm die je gemakkelijk kan bewerken of uitschakelen. In figuur 3 zie je mijn template voor zend_mail. Ik heb er makkelijk tientallen gedefinieerd, dat voorkomt de ergernis om steeds hetzelfde opnieuw te doen maar het voorkomt zeker ook fouten. Zeker bij debuggen kan je hier dankbaar gebruik van maken. Mijn gedefinieerde template heeft in elk geval uitgelezen backtraces, regel- en fileaanduiding en duidelijke CSS highlighting. Iets wat ik bij handmatig debuggen in een klein project normaal niet zou toepassen vanwege de tijdsinvestering. Nu hoef ik hiervoor alleen mijn shortcut maar aan te roepen.

Zoeken

Figuur 4, twee van de vele zoekmogelijkheden binnen PhpStorm.

Dat je kan zoeken in PhpStorm zal je niet verbazen, maar het werkt zo fijn dat ik het toch even wil benoemen.
Binnen PhpStorm heb je diverse zoekmogelijkheden, waarvan ik zelf (en velen met mij) vaak de volgende benut:

  • Zoeken naar symbols (denk aan functies, variabelen, attributen en constanten)
  • Zoeken op classes (figuur 4 rechts)
  • Zoeken naar bestanden (figuur 4 links)
  • Zoeken op het voorkomen van tekst 
  • Zoeken op usages van bepaalde functies en attributen.
Zodra je een nieuw project of directory opent, wordt het hele project gescand en geïndexeerd. Wijzigingen aan de code werken alleen de noodzakelijke onderdelen in de indexering bij. Dit zorgt ervoor dat je zoekresultaten belachelijk snel zijn. Wat fijn is als je jezelf wegwijs maakt in een nieuw project, of als je gewoon net zo ongeduldig bent als ik :-).
 

Coole features

Multi-copy paste

Voorheen had ik een extra utility op mijn mac draaien, die ervoor zorgde dat ik meer dan mijn meest recente klembord-item kon plakken. PhpStorm lost dit intern op (Figuur 5). Je kan de vijf laatste items die je op je klembord geplaatst hebt plakken. Dit geldt ook voor zaken, die je buiten PhpStorm hebt geknipt of gekopieerd. 

Sql ondersteuning

PhpStorm biedt ook uitgebreide SQL (MySQL, PostgreSQL, Oracle, DB2 etc) ondersteuning. Al moet je daarvoor wel een goede connector instellen. Als je dit hebt gedaan, krijg je de volgende mogelijkheden:

  • Sql-code direct uitvoeren (en het resultaat zien);
  • Syntax highlighting;
  • Autoaanvulling (ook op basis van je tabellen en kolommen);
  • Aanpassen van data in je database;
  • Inzien van je structuur (tabellen en onderliggende relaties) via een UML-view.

Emmet

Figuur 7, het inzetten van Emmet. makkelijke notatie om snel HTML te generen.

In figuur 7 zie je de werking van Emmet(zen-coding) terug. Zoals je kan zien, wordt de 'instructie' links in figuur 7 uitgebreid als je gebruik maakt van de ingestelde hotkey (bij mij tab). Dit is een ontzettend snelle en fijne manier om je HTML te coderen zonder onnodig werk.

Minder complex om uit te leggen, maar minstens even handig: de mogelijkheid om line-endings (CR/CRLF) aan te passen, een byte-order-mark te verwijderen of de verschillen tussen bestanden na te lopen. Je kan dus makkelijk bestanden vergelijken van verschillende projecten, of zelfs een lokale directory met een directory op een FTP. Ideaal voor (hopelijk alleen legacy)projecten die niet opgenomen zijn in versiebeheer.

Je kan ook setters/getters genereren voor attributen, zoals in veel moderne IDE's kan. Ook dit scheelt onnodig handwerk en PhpStorm handelt dit correct af. Zowel de gegenereerde comments, variabelnamen als funtienamen. Als PhpStorm herkent dat het om een boolean gaat, past hij ook de naamgeving van de getter aan. $bSent zal een getter als ::isSend() genereren in plaats van de standaard ::getIsSend(). PhpStorm houdt gelukkig ook rekening met een static-scope als deze aanwezig is.

Buiten het generen van bijvoorbeeld documentatie voor elke functie of method, geeft PhpStorm ook aan als je comment niet overenkomt met de inhoud. Denk aan comments waarin een @throws exception mist of waarin het type (of aantal) van parameters niet klopt.

Plug-in's 

Buiten de ingebakken ondersteuning (zie ondersteuning programmeertalen/frameworks), kan je dit verder uitbreiden door plug-ins in te zetten. Sommige zijn kleinschalig, zoals een regex-tester. Maar plug-in's voor bijvoorbeeld Magento (Magicento) en Symfony2 (Symfony2 plug-in), kunnen je leven veel makkelijker maken. Van de Symfony2 plug-in kan je auto-aanvulling verwachten in configuratiebestanden, maar ook dat je makkelijk vanuit templates kan doorklikken naar de bijhorende controllers. Magicento voegt op zijn manier weer specifieke Magento-mogelijkheden toe door met een paar klikken een gehele module voor je te generen. Daarnaast gaat vooral het navigeren veel makkelijker; als een event wordt gedispatched kan je direct naar de observer daarvan doorklikken.

Buiten de bekende frameworks maken we intern ook veel gebruik van ons eigen framework. We hebben hierin een call naar een statische functie: getInstance('ModuleNaam') die ons een bepaalde module teruggeeft. PhpStorm kan vanuit de input niet herleiden wat voor object(klasse) dit teruggeeft. Hierdoor ontbreekt je autoaanvulling. Dankzij de plugin Dynamic return type hebben we dit bij E-sites ook rechtgetrokken. Hierdoor krijgen we opnieuw de autoaanvulling van de gehele klasse (en wat de subklasse erft). 

Performance

In de praktijk is de meest gebruikte functionaliteit erg snel. Natuurlijk heb je altijd voorbeelden die buiten de snelle operaties vallen:

  • Het reformatten van een fors XML-bestand;
  • De SVN-integratie (het aanmaken van een volledige file-structuur met continue SVN-add)
  • Het direct doorzoeken van een nieuw project, als deze nog niet is geïndexeerd. 

Dit zijn uitzonderingen waar je naar mijn idee niet vlug tegenaan loopt en daarnaast zijn deze niet helemaal te wijten aan PhpStorm. In het verleden heb ik vooral gebruik gemaakt van Eclipse/Zend Studio, Sublime en Netbeans. PhpStorm is voor mij qua snelheid zeker een grote stap vooruit. Om dit te realiseren laadt PhpStorm veel uit het geheugen, maar dat vormt geen probleem voor een moderne pc. 

Nadelen PhpStorm

Tot nu toe allemaal heel rooskleurig. Nu over de nadelen, want die zijn er natuurlijk ook. Bij de laatste editie van Dutch PHP Conference (DPC) werd in de zaal gevraagd wie er PhpStorm gebruikt. Meer dan 80% van de aanwezigen stak hun hand op. Dat is een groot verschil met de 40% die in figuur 1 is weergegeven. Dat heeft natuurlijk zijn redenen: developers op DPC zijn vaak early adopters en dagelijks professioneel aan het ontwikkelen. Dat ze aanwezig zijn op een conferentie betekent dat zij (of hun werkgevers) ook willen investeren in hun beroep. Dat brengt ons indirect bij het grootste nadeel van PhpStorm: licentiekosten en de commerciële instelling die daarbij komt kijken. Daarnaast zie je dat naast de applicatie er ook voor plug-in's vaak een bedrag wordt gevraagd. Veel van de ondersteuning en features zijn namelijk ook beschikbaar in andere IDE's, al komen ze daar minder goed uit de verf. Maar aan die IDE's zit geen prijskaartje. Als je niet dagelijks ontwikkelt is dat misschien een concessie die je wilt doen.

Een ander nadeel is dat de performance snel minder wordt als je meerdere projecten tegelijkertijd open hebt staan (includes gaan daarentegen prima). Bij PhpStorm houdt dit in dat er een nieuwe instantie wordt gestart (flink wat geheugen), waar andere IDE's dit vaak in één instantie beheren. PhpStorm is ook sterk met het aankaarten van refactormogelijkheden. Maar vaak ben je beperkt door het framework dat je hanteert (Magento). Dit houdt soms in dat PhpStorm flink wat bestanden als 'errornous' markeert en daardoor het overzicht van echte fouten verliest. Ik had graag een mogelijkheid gezien waarbij je zulke specifieke errors kan markeren om te negeren.

Conclusie

PhpStorm is intuïtief, efficiënt, krachtig, performant maar commercieel. Dat is wel de kortste samenvatting die ik kan geven. De beste combinatie van functionaliteiten van andere IDE"s is gebundeld met daarnaast ook genoeg exclusieve features. De uitgebreide ondersteuning voor moderne tools zorgt ervoor dat je bijna al je werk kan verzetten in je IDE zelf. Ik maak nu vijf maanden gebruik van PhpStorm en heb alleen spijt dat ik niet eerder ben overgestapt. Maak niet dezelfde fout, installeren die trial! :-)

 

 

E-sites zoekt developers!

Technologie ontwikkelt zich razendsnel. En wij dus ook. We omarmen nieuwe technologie, experimenteren en investeren. In goede tools en apparatuur. En in jou. Join us! Bekijk onze vacatures.

 

6 E-commerce trends die op iedere website toegepast kunnen worden

Door Marloes Bovee

In dit artikel stip ik de belangrijkste e-commerce trends voor 2015 aan en vertaal die naar tips die op iedere website toepasbaar of relevant zijn. - Lees meer

Lees verder