Nahradit všude self → static?

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

Před nějakou dobou jsme ve firmě narazili na to, že Nette\Config\Config v konstruktoru používal klíčové slovo self namísto static. Což se ukázalo jako problém, protože když jsme si tuto třídu podědili, tak tento konstruktor stále vytvářel podklíče jako objekty nadtřídy a dělalo to bordel (některé konfigurační položky měly vlastnosti naší poděděné třídy, některé ne). Vytvořil jsem a poslal fix a David ho přijmul. Problém vyřešen.

Jenže tento týden jsem narazil na stejný problém u třídy Nette\Image, kdy jsem si jí podědil, abych si dopsal některé vlastnosti (jmenovitě, aby si pamatovala cestu k souboru, ze kterého byl obrázek vytvořen a metodu getHtml() na vrácení HTML tagu obrázku). V praktických statických metodách fromFile, fromBlank apod. je opět užíváno klíčové slovo self a to způsobuje, že i v případě přístupu přes poděděnou třídu se vytvoří objekt typu Nette\Image. Situaci ještě zhoršuje třída Nette\ImageMagick a zatím netuším, jak bych čistě a pomocí co nejméně řádků kódu vyřešil vzájemnou spolupráci mezi Nette\Image, Nette\ImageMagick, Medio\Image a Medio\ImageMagick, aby se vše chovalo korektně.

Protože tuším, že tímhle problémem bude Nette prošpikované a nerad bych posílal postupně Davidovi náhrady self → static v místech, kde jsem to zrovna potřeboval, vznáším tedy návrh, aby verze frameworku pro PHP 5.3 obsahovala tam, kde se předpokládá využití dědičnosti, klíčové slovo static namísto self.

sodae
Nette Evangelist | 250
+
0
-

jsem pro

Honza Marek
Člen | 1664
+
0
-

Třeba i u Nette\Web\Html jsem to kdysi potřeboval.

paranoiq
Člen | 392
+
0
-

v generované verzi pro PHP 5.2 se static hádám nahrazuje za self (alespoň podle pohledu do stažené verze 5.2 tam self je)

nebude dost matoucí, když se stejné objekty v různých verzích Nette chovat jinak?
ale kdo používá zároveň 5.3 i 5.2 verzi?

Ondřej Mirtes
Člen | 1536
+
0
-

Podle mě u PHP 5.2 toto chování nemůže očekávat nikdo (ten jazyk to zkrátka nepodporuje), u PHP 5.3 by mělo být výchozí a podle mě je přínosné.

Aurielle
Člen | 1281
+
0
-

+1

Majkl578
Moderator | 1364
+
0
-

Jsem pro. A věci, které by se neměly dát překrýt by se měly dát dořešit pomocí final.

David Grudl
Nette Core | 8227
+
0
-

Snažil jsem se to už všude, kde to dávalo smysl, nahradit. Ale na Image jsem asi zapomněl.