Vom: 17.09.2012

Codevervollständigung in PhpStorm für unbekannte Typen

Wer im MVC Modell programmiert verteilt seinen Code über mehrere Stellen, der in seiner Logik eigentlich zusammengehört. So ist es oft so, dass im Controller Variablen deklariert und mit Objekten belegt werden, um diese dann an die View zu übergeben:

public function detailAction() {
  $productid = intval($this->_getParam("productid"));
  $product = Object_Product::getById($productid);
  $this->view->product = $product;
}

Und in der View zB:

print $this->product->getName();

Wer mit professionellen IDEs arbeitet, wird die Codevervollständigung zu schätzen gelernt haben. PhPStorm zum Beispiel kennt die Klassendefinition von Object_Product, welche im Controller $product zugewiesen wird, und kann bei Bedarf entsprechende Vorschläge für zur Verfügung stehende Methonden machen. In der View ist das anders - hier wird die Variable während der Laufzeit durch $this->view->product an $this->product "durchgeschleust" und steht daher im Code der View deklarationslos da - die IDE hat hierbei keinerlei Informationen, um welchen Typ es sich handelt und kann keine Vorschläge machen. Hier kommt nun PhpDoc in's Spiel, mit dem man bekanntlich Klassen- und Methodendefinitionen dokumentieren kann, um automatisch eine Dokumentation der API erzeugen zu können. Was offenbar viele nicht wissen: es lassen sich auch die Deklaration von Einzelvariablen direkt im Code mit PhpDoc dokumentieren - hiermit kann man den meisten IDEs Informationen über die Variable zukommen lassen:

/**
 * @var Object_Product $product
 */
$product = $this->product;

Wer die Syntax nicht kennt: PhpDoc wird eingeleitet durch einen Kommentar mit zwei Sternen: /**. Ein Schlüsselwort, eingeleitet mit "@", beschreibt dann einen eigenen Typ der Dokumentation, hier @var den Typ der Variable. Das Tag var erwartet als nächstes Wort den Typ der Variable, hier Object_Product, gefolgt vom Namen der Variable. Mit diesen Angaben kennt dann auch die IDE den Typ der Variable und versorgt den Programmierer mit (mehr oder weniger ;-) ) sinnvollen Vorschlägen: Dies funktioniert natürlich auch für die meisten anderen IDEs wie zum Beispiel Netbeans.