Mit den PDT (PHP Development Tools für Eclipse) kannst Du die meisten Variablen in PHP autovervollständigen. Das aber meist nur, sofern sie richtig definiert sind oder das php-doc richtig eingepflegt ist.
Dieser Artikel zeigt ein paar Tipps, wie Du auch in unklaren Situationen die Autovervollständigung eindeutig machen kannst. Wenn Du lediglich
die aktuellste Version von PDT aufsetzen möchtest, schau Dir bitte das andere Tutorial an.
Graste hat ein kleines Script veröffentlicht, welches dem gesamten (Agavi-)Projekt in Eclipse sagt, dass die Variablen $template, $ro, $rd usw. vom richtigen Typ definiert sind. Diese sind normalerweise in Agavitemplates verfügbar, werden aber via .xml beim Compile-Vorgang reinkompiliert und sind daher für Eclipse nicht sichtbar.
Hier meine leicht veränderte autocomplete.php:
<?php
exit();
$slots = array();
$template = array(); // agavi 0.11 standard
$t = array(); // agavi 1.0 standard
$tm = new AgaviTranslationManager();
$ro = new AgaviWebRouting();
$rq = new AgaviWebRequest();
$ct = new AgaviController();
$us = new AgaviSecurityUser();
$rd = new AgaviWebRequestDataHolder();
?>
Diese Datei einfach als autocomplete.php in Dein Projekt speichern und Eclipse wird diese Variablen standardgemäß mit dieser Klasse initialisiert vermuten und schon hat man die nette Autovervollständigung auch in Agavitemplates.
Wenn Du den Rückgabetyp für eine Funktion auch für einen bestimmten Typ (und damit autovervollständigungsfähig) definieren möchtest, brauchst Du nur die PHP-Docs richtig zu setzen. In diesem Beispiel gibt die Funktion test123() ein SomeClass-getyptes Element zurück:
/**
* [strong]@return SomeClass[/strong]
*/
function test123() {
/* ... */
}
Manchmal möchte man, dass eine Variable für einen bestimmten Scope den richtigen Typ hat. Das geht dann wie folgt:
if (false) $instance = new [strong]SomeClass[/strong]();
oder besser sogar
/* @var $instance [strong]SomeClass[/strong] */
und Eclipse wird die Variable $instance nun für eine SomeClass halten.
Hast Du weitere Tipps? Dann schreib sie bitte in die Kommentare!