__get v presenteru, přepisování metod

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

Zdravím,
chci se zeptat jak je to s magickýma funkcema __get a __set .

Nyní řeším takovou věc:

Mám :

1. presenter A (Rodič, dědí od UI\Presenter)
→ Definuji v ní:
protected $variable;

2. presenter B (extenduje presenter A).

V presenteru B chci zavolat :

  • $this->variable->table

A chci aby v presenteru A byla metoda __get , ktera bude umet to, že:

1. jakmile zjisti, že někdo chce volat jeji promennou např tím __get

  • Tak chci aby při volání $this->variable->table

se to table naplnilo nějakými daty.Bohužel Nette a asi Object si přepisuje metody __get a __set
takže nevím jak to udělat abych mohl používat vlastní metodu __get.

Doufám, že mě pochopíte.Díky

Ascaria
Člen | 187
+
0
-

1. definuj jí v presenteru A jako:

private $variable = null; // přestane být viditelná pro presenter B

2. a přidej ještě do presenteru A

/**
 * Bude vidět v potomkovi a bude se chovat
 * jako metoda $this->getVariable() i jako
 * read-only property $this->variable;
 */
public function getVariable()
    {
    if(null === $this->variable)
	{
	// Načtení dat tady
        $this->variable = 'pes';
	}
    return $this->variable
    }

Editoval Ascaria (3. 4. 2012 12:06)

jetpack
Člen | 71
+
0
-

Asi jsem to udělal složitěji, ale vytvořil jsem si to na základě ModelLoaderu. Již mi to funguje :-)
Ale i tak díky ;)