podpora klíčového slova friend v Nette\Object

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

nápad k zamyšlení inspirovaný https://phpfashion.com/…y-experiment

pro přístup k veškerým protected členům třídy:

/**
 * @friend(IWebPageLoader)
 */
class WebPage {
    ...

    protected function setData($data) {
        ...
    }
}

nebo pro přístup ke konkrétní protected metodě nebo vlastnosti:

class WebPage {
    ...

    /**
     * @friend(IWebPageLoader)
     */
    protected function setData($data) {
        ...
    }
}

Editoval paranoiq (29. 10. 2009 13:10)

Honza Kuchař
Člen | 1662
+
0
-

Zajímavý nápad. Mě se to líbí. :) Akorát je tu zase problém s eAcceleratorem. :(

paranoiq
Člen | 392
+
0
-

ano, to bude ještě nějakou chvíli trvat, než budou anotace fungovat všude

anotace se mi líbí hlavně proto, že je to v podstatě nejjednodušší způsob jak rozšiřovat syntax jazyka. (tedy ještě si můžete napsat rozšíření, ale který hosting to nainstaluje ^_^)

Honza Marek
Člen | 1664
+
0
-

No já nevim, tyhlety friend věci mi přijdou trochu proti OOP. Navíc je to feature request spíš pro nette language a ne nette framework.

Ondřej Mirtes
Člen | 1536
+
0
-

Potomci společné třídy si navzájem vidí protected properties, tak si myslím, že něco takovéhleho není třeba.

paranoiq
Člen | 392
+
0
-

často není možné ani vhodné, aby objekty, které spolu blíže komunikují byly potomky stejné třídy. friend ≠ family

Editoval paranoiq (30. 10. 2009 17:52)

Petr Motejlek
Člen | 293
+
0
-

Nevím, jestli ty anotace jsou to pravé ořechové. Hezky se to čte, ale dokud nebude možný si nechat inteligentně napovídat od IDE, tak bych se přikláněl k použití nějaké speciální metody (jako to je třeba u persistentních komponent/atributů) ;).

Honza Marek
Člen | 1664
+
0
-

LastHunter napsal(a):

Potomci společné třídy si navzájem vidí protected properties, tak si myslím, že něco takovéhleho není třeba.

Mám tomu rozumět tak, že všichni potomci třídy Object si můžou navzájem hrabat v protected properties?

paranoiq
Člen | 392
+
0
-

Honza M. napsal(a):

Mám tomu rozumět tak, že všichni potomci třídy Object si můžou navzájem hrabat v protected properties?

nikoliv. mohou si navzájem hrabat jen do těch protected properties, které měly v okamžiku zdědění. čili např. rodič nemůže zasahovat do nově definovaných chráněných vlastností potomka a sourozenec nemůže sourozenci do toho, co nebylo definováno v rodičovi

@Petr Motejlek: samozřejmě, co jde udělat anotacemi jde udělat méně elegantně (ale zato 100% spolehlivě) i kódem, třeba tak jako u @persistent. snad nám David vyzradí co na nás chystá on s tou podporou internal

sebelepší IDE vám vlastnosti definované takovou magickou metodou nenapoví, pokud nebude mít přímo podporu daného frameworku. to už se dá v IDE spíše očekávat nějaká obecná podpora anotací

Editoval paranoiq (30. 10. 2009 18:13)

David Grudl
Nette Core | 8170
+
0
-

paranoiq napsal(a):

Honza M. napsal(a):

Mám tomu rozumět tak, že všichni potomci třídy Object si můžou navzájem hrabat v protected properties?

nikoliv. mohou si navzájem hrabat jen do těch protected properties, které měly v okamžiku zdědění.

Tusim ze muzou hrabat do vseho.

paranoiq
Člen | 392
+
0
-

tak je to tak na půl cesty. rodič může šahat potomkům do všeho, i když o tom prd ví (to jsem netušil a moc se mi to nelíbí), ale sourozenci jsou mezi sebou navzájem v bezpečí

testík: http://pastie.org/677210