Da bin ich eben gerade über einen 2 Jahre alten Beitrag von mir über Magische Methoden und Eigenschaften in PHPDocumentor und Zend Neon [1] gestolpert. Darin geht es um die bösen magischen Methoden und Objekt-Attribute in PHP, die mittels der PHPDoc-Tags @property und method einmal von PHPDocumentor erkannt und dokumentiert, und von Zend Neon im Code vervollständigt werden können.
Mittlerweile nutz ich die Zend-IDE nicht mehr, sondern nur noch Eclipse PDT, was das Auflösen der Magie damals noch nicht beherrschte [2]. Jetzt geht es zumindest, deshalb schnell mal ein kurzer Abriss. Vorweg sei noch gesagt, das man (scheinbar) den Full-Qualified-Name für die Datentypen angeben muss, wenn man mit Namespaces arbeitet. Erstmal die Syntax, die sich seit über 2 Jahren nicht geändert hat [3][4]:
@property type $name1 description
@property-read type $name2 description
@property-write type $name3 description
@method returntype name() name(arg1type $arg1, arg2type $arg2, ...) description
Gerade @method wurde nicht hübscher. Im Code sieht das dann so aus:
< ?php
namespace my\name\space;
class Dummy {
public function myDummy(){}
}
/**
*
* @property \my\name\space\Dummy $readwrite
* @property-read \my\name\space\Dummy $readonly
* @property-write \my\name\space\Dummy $writeonly
* @method \my\name\space\Dummy myFunction
*/
Class Test {
}
$a = new Test();
$a->
Das kann man sich jetzt mal speichern und etwas herumprobierne. Aber etwas anders siehts dann doch aus … !? Es scheint so, also wenn PDT die Beschreibung und (bei den Methoden) die Signatur ignoriert [5], weshalb ich erstmal darauf verzichtet habe, bis ich mehr weiß. Dafür funktionieren die (Rückgabe)Typen problemlos und in der Outline-View tauchen die neuen Methoden und Properties ebenfalls auf [6]. Zum Schluss werf ich nochmal ein, dass auch immer:
/* @var type $name */
Funktioniert, um PDT einer Variablen einen bestimmten Typ unterzujubeln. Falls noch wer weitere Tipps hat, immer her damit. Ich bin allerdings schon überrascht, dass es bei Google garnicht sooo viele (brauchbare) Treffer zum Thema gibt…
[1] Heute heißt das Ding einfach “Zend Studio for Eclipse” (ZSfE)
[2] Falls jemand weiß, seit wann das auch PDT kann, möge derjenige mir doch eine kleine Nachricht hinterlassen.
[3] http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.property.pkg.html
[4] http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.method.pkg.html
[5] Wenn dazu mehr weiß, auch gerne mal kurz melden.
[6] zB zu sehen in einem Anhang zu einem Doctrine-Ticket