Netbeans a datove typy v metodach

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Glottis
Člen | 129
+
0
-

cao, kdyz se tu tak resili i IDE na vyvoj, mam dotazek na neco co me trapi a mozna nekdo vi. netbeans muzu napovedet jakeho typu jsou tridni promenne pres anotace klasikou:

<?php
class Trida {
	/** @var UI/Form */
	private $test;
}
?>

a netbeans to pak napovidaji. jenze @var jde pouzit jen u deklaraci a ne uz v metodach

<?php
class Trida {
	public function test() {
		$form = $this->getComponent("formularik");
	}
}
?>

a tady uz mi nenapovi. coz je dost neprijemne. jak to resite?

dik :)

Michal

grogy
Člen | 147
+
0
-

Pro parametr použij @param ;)

Nox
Člen | 378
+
0
-

No @param můžeš dát ke svým metodám, ale getComponent hádám, že bude z Nette

Pak použiješ @var, ale trochu jinak: /* @var $form UI\Form */

Glottis
Člen | 129
+
0
-

no ja to ale nechci u vstupnich parametru. to vim ze

<?php
/**
 * @param \Ocs\Logs $logs
 */
public function setLogger(\Ocs\Logs $logs) {
	$this->logs = $logs;
}
?>

ale kdyz si promenou naplnim az v metode

<?php
class Trida {
    public function test() {
        $form = $this->getComponent("formularik");
	$form-> //tady mi u znenapovi ani kdyz dam pred metodu /** @param UI\Form  $form */ co zje podl eme jen pro vstupni parametry :)
    }
}
?>
jiri.pudil
Nette Blogger | 1032
+
+1
-
<?php
class Trida
{
	public function test()
	{
		/* @var $form Nette\Application\UI\Form */
		$form = $this->getComponent("formularik");
	}
}
?>

Trik je v tom, nepoužít phpDoc, ale normální komentář.

castamir
Člen | 629
+
0
-

Pokud má ta metoda (v tomto případě getComponent) definovanou anotaci @return, tak ti to podle toho bude napovídat. Problém getComponent bude ale asi v tom, že ti to může vrátit různé třídy (Např. vlastní třídu dědící od Control nebo třeba formulář).

Obejít se to dá způsobem, jaký popsal @jiri.pudil.

Editoval castamir (28. 2. 2013 9:37)

Glottis
Člen | 129
+
0
-

me to proste nic nedela :/ nechapu to. ani NB 7.2 ani 7.3 dokonce NB neznaji ani tu anotaci @var v tele metody. nemate neco doinstalovaneho?

Glottis
Člen | 129
+
0
-

respektive dela ale mysli si ze $form je instanci IComponent coz vraci to getComponent a nebere v uvahu tu anotaci :/

Glottis
Člen | 129
+
0
-

takjeste jsem zkusil takto a vysledek …

<?php
    public function tests() {
        /* @var $form Nette\Application\UI\Form */
        $form;
        //tady doplnuje

        /* @var $form Nette\Application\UI\Form */
        $form = $this->getComponent('cdrFilter');
	//tady uz ne
    }

?>
hAssassin
Člen | 293
+
0
-

coz je logicky a bylo to uvedeno castamirem je to proto ze getComponent() nevraci UI\Form ale proste jen IContainer nebo neco podobnyho. Cili reseni by mohlo byt toto:

/**
 * @retrun Nette\Application\UI\Form
 */
public function tests() {
    $form = $this->getComponent('cdrFilter');
    /* @var $form Nette\Application\UI\Form */
    $form->... // a tady uz to doplnovat musi

    return $form;
}

Editoval hAssassin (28. 2. 2013 10:31)

Glottis
Člen | 129
+
0
-

pecka! dik to funguje perfektne. dat to az za to me fakt nenapadlo. stydim se :)