Türchen 02: PhpStorm – besser, schneller, entspannter

Seit PhpStorm von JetBrains 2009 erschienen ist, hat sich diese Entwicklungsumgebung (Integrated Development Environment, IDE) für PHP rasch durchgesetzt. Wer sie einmal ausprobiert hat, gibt sie nicht mehr her. Anders als Eclipse PDT, NetBeans oder Aptana Studio ist PhpStorm in den meisten Formen kostenpflichtig.

Schneller Magento entwickeln

In erster Linie besticht PhpStorm durch seine enorme Geschwindigkeit. Sowohl das Hochfahren der IDE als auch das Indizieren eines Projektes sind schnell erledigt. Das gilt auch bei größeren Projekten, zu denen Magento-Projekte ja zweifelsohne zählen. Je mehr Dateien und Quellcode-Zeilen die Entwicklungsumgebung im Hinblick auf die Autovervollständigung verarbeiten muss, desto langsamer wird der Editor. Dies scheint für PhpStorm aber nicht zu gelten: Die Code-Autovervollständig kommt immer nahezu in Echtzeit. PhpStorm versucht auch intelligent die gefundenen Ergebnisse nach Relevanz und Bedarf des Entwicklers zu sortieren, nicht einfach nur alphabetisch.

Neben der Geschwindigkeit der IDE selbst bietet sie eine Reihe von Shortcuts und Tools, um schneller entwickeln zu können. Die wohl größte Beschleunigung erlebt ein Nutzer wohl, wenn er sich die Nutzung der Maus abgewöhnt. Hier unterstützt PhpStorm durch enorm viele Tastaturkürzel, die in der PhpStorm Default Keymap aufgeführt sind. Diese ist auch in der IDE im Hilfebereich zugreifbar. Darüber hinaus lohnt es sich auch, die Tips of the Day zu studieren, die nach der Installation automatisch erscheinen oder über das Help-Menü erreichbar sind:

phpstorm-tip-of-the-day

Und Action …

Über das Tastaturkürzel Strg + Umschalt + A lassen sich beliebige PhpStorm-Actions aus dem Menü oder sogar darüber hinaus direkt aufrufen:

phpstorm-find-action

Die Suche nach der Klasse

Wer schnell in eine Klasse springen möchte, deren Namen er kennt oder teilweise kennt, kann mit Strg + N diese schnell über ihren Namen finden. Dabei reicht schon die Angabe der Anfangsbuchstaben der CamelCase-Schreibweise:

phpstorm-class-name-650x162

Ablage V

PhpStorm bringt direkt eine multiple Zwischenablage mit, in der man beliebig viele (Standard-Einstellung: 5) Texte zwischenspeichern kann. Mit Strg + Umschalt + V öffnet sich die entsprechende Toolbox, die sich bequem per Tastatur bedienen lässt:

phpstorm-clipboard

Wo war ich noch gleich ...

Wer sich auf der Suche nach einer Information im Magento-Kern durch zig Klassen durcharbeitet, sucht zwangsläufig wohl hinterher den Ort, wo er zuletzt Quellcode verändert hat. Mit dem Tastaturkürzel Strg + Umschalt + Backspace springt man automatisch zu dieser Stelle zurück.

Besser Magento entwickeln

Natürlich kommt es nicht nur auf Geschwindigkeit beim Coding an, sondern vor allem auf Qualität. Auch hier bietet PhpStorm einige interessante Shortcuts und Refactoring-Tools an, die dabei helfen, Fehler zu vermeiden.

Ihr heißt jetzt alle anders

Das Umbenennen einer Variablen, Methode oder Konstanten ist sehr fehleranfällig, wenn diese bereits vielfach in Gebrauch sind. Schnell rutscht einem ein Exemplar durch und man erhält einen schwer zu findenden Fehler. PhpStorm und Umschalt + F6 helfen einem hier, indem alle Vorkommen im entsprechenden Scope (z.B. einer Methode) konsistent geändert werden. Ändert man eine Klassen-Variable, bietet PhpStorm sogar die konsistente Änderung von Getter- und Setter-Methoden an.

phpstorm-rename-650x348

Tausend und eine Variable / Methode / Konstante

Beim Refactoring gliedert man nicht selten Ausdrücke in neue Variablen oder Methoden aus. Um aus bestehendem Code Variablen, Methoden oder Konstanten anzufertigen, bietet PhpStorm mit den Shortcuts Strg + Umschalt + V (Variablen), Strg + Umschalt + M (Methoden) bzw. Strg + Umschalt + C (Konstanten) Refactorings an, die vollständig und korrekt arbeiten. Bei Methoden werden alle Abhängigkeiten über einen Dialog erkannt und aufgelöst:

phpstorm-extract-method-650x307

Achtung! Befehl zum Einrücken!

Hat sich die Einrückung in Teilen des Codes verabschiedet oder der Autor hat hier mal „ein Auge zugedrückt“, kann man die Code-Passage einfach markieren und mit Strg + Alt + I durch PhpStorm einrücken lassen.

Noch schneller und besser mit Magicento

Enrique Piatti ist vor einiger Zeit auf die glorreiche Idee gekommen, ein Plugin namens Magicento für PhpStorm zu entwickeln, das die speziellen Anforderungen von Magento an eine IDE noch präziser abdeckt. Drückt man im Code-Editor Alt + M, öffnet sich das Magicento-Kontextmenü mit einigen hilfreichen Funktionalitäten.
Beispielsweise hilft das Tool beim Kopieren eines Templates in ein anderes Theme, wenn dies überlagert werden soll:

magicento-copy-template

Und auch die Autovervollständigung bei Klassennamen wird durch Magicento entsprechend der Konvention (Verzeichnispfad + Dateiname) ermöglicht:

magicento-auto-complete-cla

Die Autovervollständigung funktioniert mit Magicento auch bei Objekten, die aus entsprechenden Factory-Methoden stammen:

magicento-auto-complete-fac

Diese und weitere Features listet das Magicento-Plugin auf seiner Feature-Seite, wo auch die wöchentlich durch das Plugin eingesparte Zeit geschätzt wird.

Das Tool ist kostenlos, aber eine Spende zwischen $15 und $50 wird erbeten und ist nur fair, bei dem daraus entstehenden Produktivitätsgewinn.

Tool-Integration

PhpStorm integriert die verschiedensten Tools direkt in die Entwicklungsumgebung. Angefangen bei FTP- und Datenbank-Server über Versionsverwaltungssysteme (VCS, z.B. Git, Subversion), einen REST-Client, eine SSH-Konsole bis hin zu Vagrant und Composer.

Bei uns in der Firma ist unter anderem die Integration unseres Ticket-Systems (Redmine) in Kombination mit den Changelists interessant. So lassen sich beispielsweise JIRA, Redmine, Trac, Mantis oder Github über Tools > Tasks & Contexts einbinden.

Die Auswahl eines Tasks / Tickets erfolgt über das Menü oder schneller über Alt + Umschalt + N, woraufhin sich folgendes Auswahlfenster öffnet:

phpstorm-redmine-ticketauswahl

Für jedes angefangene Ticket kann PhpStorm eine eigene Changelist und einen eigenen Entwicklungskontext führen. Das hat zur Folge, dass man schnell zwischen den Aufgaben hin und her springen kann: PhpStorm öffnet automatisch die Dateien in den Editor, die mit der Aufgabe in Verbindung stehen.
Außerdem kann automatisch ein Branch in der Versionsverwaltung erstellt werden. Der Entwickler braucht also nur noch die Aufgabe auswählen und ist sofort startklar.

phpstorm-redmine-open-tastk

Werden Änderungen in die Versionsverwaltung eingecheckt, füllt PhpStorm automatisch den Commit-Kommentar aus. Die Vorlage hierfür lässt sich im konfigurierten Server des Ticketsystems in PhpStorm vorgeben. So kann beispielsweise der Commit automatisch per refs. #3646 mit dem Ticket verknüpft werden. Also auch hier eine angenehme Unterstützung.

Debugging

Wie könnte man nur effizient programmieren ohne Debugging? Die Fähigkeiten von IDEs bzgl. des Debuggings sind wohl weitläufig bekannt.
Ich habe erst kürzlich entdeckt, dass man die einzelnen Breakpoints in PhpStorm auch noch konfigurieren kann. So kann man beispielsweise festlegen, dass der Breakpoint nur dann greift, wenn eine bestimmte Bedingung erfüllt ist (Condition). Dies ist besonders praktisch bei Schleifen oder zentralen, häufig aufgerufenen Methoden, bei denen nur ein ganz spezieller Durchlauf untersucht werden möchte.

phpstorm-debugging-breakpoi

Im obigen Beispiel wird beim Breakpoint nur dann gestoppt, wenn das Produkt in der Methode die ID 15 besitzt. Darüber hinaus ist der Breakpoint zunächst deaktiviert, bis ein anderer Breakpoint in der Datei Observer.php (Zeile 17) durchlaufen wurde. Damit lassen sich bestimmte Abhängigkeiten besser beleuchten: „Halte hier im Code nur an, wenn du vorher an Stelle XY vorbeigekommen bist.“
Besonderes Augenmerk ist dabei auf den Schalter Suspend zu legen, mit dem ein Anhalten im Code verhindert werden kann. Es ist möglicherweise sinnvoll, diesen Haken in Observer.php zu entfernen, da dieser nur als stille Markierung dient.

Fazit

PhpStorm begeistert durch Geschwindigkeit und wirklich nützliche Tools, die bis ins Detail ausgeklügelt wurden. Die Entwicklung von großen PHP-Projekten wie Magento war noch nie so komfortabel wie heute mit dieser IDE in Kombination mit Magicento und den weiteren Tools der eigenen Wahl, die zumeist nativ in PhpStorm integriert sind. Wem das nicht reicht, der greift auf die zahlreichen Plugins zurück oder schreibt sich gleich selbst eins in Java. Dafür bietet JetBrains seine IntelliJ IDEA an, aber das ist eine andere Geschichte ...



Ein Beitrag von Benjamin Wunderlich
Benjamin's avatar

Benjamin Wunderlich ist Diplom-Informatiker und entwickelt mit der Shopwerft GmbH in Hamburg Magento-Shops und mit der Modulwerft kommerzielle Magento-Module. Er ist seit 2011 Veranstalter des Magento-Stammtisches in Hamburg.

Alle Beiträge von Benjamin

Kommentare
Webguys Magento Adventskalender | Mag-tutorials.de am

[…] Türchen 02: PhpStorm – besser, schneller, entspannter […]

Benjamin Wunderlich am

Hier das ganze auch noch einmal als Bewegtbild vom Hamburger Magento-Stammtisch: http://www.magento-stammtisch-hamburg.de/news/phpstorm-vortrag-15-magento-stammtisch-video.html

Don Bosco van Hoi am

CMD + Shift + A ist auch mein Alltagshelfer Nummer 1. Hilfreich finde ich auch die Möglichkeit, Diagramme einblenden zu lassen. Vor Allem bei komplexen Vererbungshierarchien ist das eine sehr schöne Möglichkeit, sich die Vererbung als einfaches UML-Klassendiagramm anzeigen zu lassen.

Siehe hier zb: http://s1.directupload.net/file/d/3460/vigv5jvc_png.htm

Dazu einfach einen Rechts-Klick auf den Klassennamen und dann Diagrams -> Show Diagrams Popup.

Benjamin Wunderlich am

Hallo Leute,

danke für das positive Feedback. Schön, dass für jeden etwas dabei war. Ich muss sagen, ich selbst habe bei der Recherche für den Artikel auch einiges gelernt. Das wichtigste ist: Man muss sich Zeit nehmen, seine Entwicklungsumgebung klug auszuwählen und kennenzulernen. Die Zeit hat man später hundertmal wieder drin.

Vielleicht fängt man den Tag als Entwickler einfach so an, dass man morgens einen Shortcut lernt und den am Tag verstärkt ausprobiert und erprobt.

Für uns gibt es kein besseres Tool als PhpStorm mit Magicento. Das hat uns richtig beschleunigt.

Beste Grüße Benjamin

Carsten Stech am

Hallo Benjamin,

super Beitrag - wie besprochen können wir das Thema dann bei Deinem Vortrag auf dem Magento Stammtisch Hamburg am 11. Dezember vertiefen: https://www.xing.com/events/15-magento-stammtisch-hamburg-1327072

Bis dann, Carsten

Florin P. am

Hey Benjamin,

danke für das ausführliche Tutorial. Ich setze schon seit einiger Zeit Magicento für die Arbeit mit magento ein und es ist ein top Tool. Deine Tipps in phpStorm sind super und sehr hilfreich, vorallem das konsistente ändern der Variablen, das is top

Simon am

Ein sehr nützlicher Beitrag, danke für die mühevolle und wunderbare Zusammenstellung ! ;)

Tobias Vogt am

Danke Benjamin, toller Beitrag. Des Task Bereich in PHP-Storm muss ich noch viel intesiver nutzen. Weiß jemand ob es da eine Doku gibt für eine eigene API?

Sonst muss ich eine bestehende "nachbauen" ;)

Danke,

Tobi

Fabian Blechschmidt am

Coole Sache und wieder einige Dinge über meine IDE gelernt :-)

Insbesondere Strg + Umschalt + Backspace und die Multi-Zwischenablage werde ich jetzt wohl öfter benutzen.

Die Erklärungen vom Debugger sind auch enorm wichtig. Wegen der ganzen Vererbung in Magento gibt es ja nur wenige save() Methoden und da ist es schon schön, wenn nicht der Breakpoint nicht erst 100 mal anspringt, bevor die Stelle kommt, für die man sich wirklich interessiert.

Danke für den tollen und informativen Beitrage.

Linktip: Der Webguys Adventskalender 2013 » Kai Köpke am

[…] (über Install-Skripte für Attribute, Kategorien, Konfigurationen, usw.) und heute dem Türchen 02: PhpStorm – besser, schneller, entspannter von Benjamin Wunderlich. Der Titel lässt es erahnen – es geht um die IDE PhpStorm und dem […]

Magento-Neuigkeiten der Woche 48/2013 am

[…] Die schöne Tradition des Webguys-Magento-Adventkalenders findet seit gestern ihre Fortsetzung. Die bisherigen Themen: “Konfiguration unnötig” und “PhpStorm – besser, schneller, entspannter“. […]

Dein Kommentar